首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Kotlin】总结 ★ ( | 参数 | 型函数 | 多参数 | 类型约束 | 可变参数结合 | out 协变 | in 逆变 | reified 检查参数类型 )

文章目录 一、 二、参数 三、型函数 四、多参数 五、类型约束 六、可变参数 vararg 关键字与结合使用 七、使用 [] 运算符获取指定可变参数对象 八、 out 协变...九、 in 逆变 十、 invariant 不变 十一、逆变协变代码示例 十二、使用 reified 关键字检查参数类型 一、 ---- 定义一个 , 将 参数 T...放在 尖括号 中 , 该参数放在 名后 , 主构造函数之前 , 该参数 T类型占位符 , 在 该中 可以使用 类型占位符 T 作为一个 使用 , 可以 定义 T 类型成员属性..., 需要两个参数来表示其类型 ; T 类型中注明 , 可以在该 Student 中随意使用 , 但是 参数 R 是首次在该函数中使用 , 因此需要在该函数的 fun 关键字...六、可变参数 vararg 关键字与结合使用 ---- 如果 类型 T参数 是 vararg 可变参数 , 则在接收 可变参数 时 , 需要使用 Array 类型 的变量进行接收

3.7K10

【Kotlin】 ③ ( out 协变 | in 逆变 | invariant 不变 | 逆变协变代码示例 | 使用 reified 关键字检查参数类型 )

文章目录 一、 out 协变 二、 in 逆变 三、 invariant 不变 四、逆变协变代码示例 五、使用 reified 关键字检查参数类型 本章总结 : 使用 out...可以使 子类对象 赋值给 父对象 ; 一、 out 协变 ---- 使用 out 关键字 , 可以使 子类对象 赋值给 父对象 ; 在 中 , 如果只将 类型...作为 函数的返回值 类型 , 则在 声明 参数 类型 时 , 在 参数使用 out 关键字 , 同时 该 又称为 生产 ( 生产接口 ) , 用于生产 指定的对象...子类 的 对象 , 可以赋值给 参数 是父 的变量 , 前提是参数必须使用 out 关键字修饰 ; 使用 in 关键字 , 可以使 父对象 赋值给 子类对象 ; 使用..., 通过 反射 可以实现 ; Java 对象.javaClass.name == "要判断的的全名" 在 函数 中 使用 reified 关键字 , 需要在 尖括号 中 类型 之前

1.6K10
您找到你想要的搜索结果了吗?
是的
没有找到

【进阶之路】Java的类型擦除式

因为类型可擦除,我们无法直接从List中取得参数类型T,所以只能从额外的参数中传递一个数组的类型进去进行转换。...三、的最佳实践 经过之前的论述,大家已经知道了Java的一些基础知识,以及在使用的时候可能出现的问题。如果在使用的时候可以遵循一些基本的原则,就能避免一些常见的问题。...在代码中避免和原始类型的混用。比如List和List不应该共同使用。这样会产生一些编译器警告和潜在的运行时异常。...当需要利用JDK 5之前开发的遗留代码,而不得不这么做时,也尽可能的隔离相关的代码。 在使用带通配符的的时候,尽可能的明确通配符所代表的一组类型的概念。 最好不要同数组一块使用。...这限制了数组的使用能力,而且会带来很多费解的问题。因此,当需要类似数组的功能时候,使用集合即可。

1.1K40

Java一分钟之——方法与接口

本文将深入浅出地探讨方法与接口的核心概念、常见问题、易错点及避免策略,并通过具体代码示例加以说明 方法简介 方法是指定义在或接口中的一个方法,该方法在声明时指定了一个或多个类型参数。...误解边界:未正确理解extends和super关键字在边界中的作用,可能导致方法无法接受预期类型参数避免策略 明确指定类型参数:调用方法时尽量指定类型参数避免使用原始类型。...利用通配符:合理使用通配符? extends T和? super T来增加灵活性,同时保持类型安全。 理解类型擦除:编写代码时考虑到类型擦除的影响,避免依赖于擦除后不存在的信息。...接口简介 接口是指在其定义中包含类型参数的接口。实现接口的必须提供具体的类型参数,使得接口的抽象方法能够操作特定类型的数据。...适度约束:在设计接口时,平衡约束与灵活性,尽量使接口具有广泛的适用性。 利用默认方法:Java 8引入了接口的默认方法,可以在接口中提供通用实现,减少实现的工作量。

24210

【Java 基础篇】Java 类型安全的编程指南

它允许您编写一次代码,然后可以用于多种数据类型,而不需要为每种数据类型都编写不同的代码。的核心思想是参数类型,即在定义、接口或方法时,可以将类型作为参数传递。...的基本用法 首先,让我们从开始,了解如何定义和使用可以接受一个或多个类型参数,并在的定义中使用这些参数。...{ System.out.print(item + " "); } System.out.println(); } 在上面的示例中, 表示 printArray 方法接受一个类型参数...避免原始类型尽量避免使用原始类型,而是使用。原始类型的历史遗留物,不安全且不推荐使用。...类型转换警告: 在使用时,可能会遇到类型转换警告,例如使用原始类型或未检查的转换。在遇到这些警告时,应谨慎处理,并尽量避免类型不安全的转换。

30930

Java Puzzlers

启示 可变长参数列表提供了一个有漏洞的抽象 和数组无法很好地协同工作 所以和可变长参数列表无法很好地协同工作 尽量不要使用数组而应该使用集合 尤其是 API 设计的时候 不要忽略编译器的警告...原因在于,声明时虽然声明了一个类型参数 T,但实际上并没有在 Glommer 中使用到这个类型参数。...在调用 new Glommer() 的时候,由于没有指定类型参数,所以实际上创建的是 Glommer 的原始类型(也就是 Glommer)的对象,而的原始类型会忽略所有内部的类型参数信息...解决方法是在创建 Glommer 类型的对象时指定一个类型参数,对于这个例子而言,由于类型参数 T 并未在 Glommer 中被使用,所以随便指定一个就可以了,例如: System.out.println...(glom(strings)); } } 启示 永远不要在新的代码中使用的原始类型 的原始类型将失去全部类型信息 这可能导致重载到意想不到的方法上 不要忽视编译器警告,即便它们难以阅读

31160

大师的小玩具——精解

接口 使用来作为接口,我们采用一个生成器,它的功能是生产对象,类似与工厂模式,但是工厂模式一般是需要参数的,参数是有继承关系的,而我们采用,生成器无需额外信息就知道如何创建对象。...方法与的区别,以及优势: 必须在创建的时候就指定好具体类型来代替 方法不需要指定具体类型,就像调用正常方法那样去掉用就好了,因为编译器会为我们找出参数类型,就像上面代码的输出...简化元组 我们这一节主要描述的是方法,上面我们提过尽量使用方法,而不是,那么之前研究到的所有均有机会被方法所改造。元组就是可以优化的一种。...解答:只有当你希望使用类型参数比某个具体类型(以及他的所有子类型)更加“化”时——也就是说,当你希望代码能够跨多个工作时,使用才有所帮助。因此,使用边界通常要比直接替换更加复杂。...使用的注意事项 1. 任何基本类型都不能作为类型参数。 不能创建类似ArrayList的东西。 2. 一个不能实现同一个接口的两种变体。

1.4K50

Java的局限和使用经验的局限的常用经验参考资料

本文首发于个人网站:Java的局限和使用经验 这篇文章主要总结的一些局限和实际的使用经验 的局限 任何基本类型不能作为类型参数 经过类型擦除后,List中包含的实际上还是...T[] array2 = (T[])new Object[100]; } } ​ 冲突1:方法名一样,参数列表是同一个类型参数的两个方法,重载将产生相同的函数签名;...导致的重载冲突 冲突2:使用接口时,需要避免重复实现同一个接口 interface Payable {} class Employee implements Payable<...2017-12-0920.31.09.png 的常用经验 尽量消除异常,初学者容易写出使用原生类型的代码,或者使用不当的代码,现在编辑器非常先进,尽量消除提示的异常;对于开发者自己确认不需要消除切可以工作的代码...,可以使用@SuppressWarnings("unchecked")屏蔽掉异常; 能用(或接口)的时候尽量使用;能用方法的时候尽量使用方法; 定义API时,尽量使用; public

82920

Java-Java5.0解读

传值参数(我们通常所说的参数)由小括号包围,如 (int x, double y),类型参数参数)由尖括号包围,多个参数由逗号分隔,如 或 。 类型参数需要名后面给出。...一旦给出了类型参数,就可以在使用了。类型参数必须是一个合法的标识符,习惯上使用单个大写字母,通常情况下,K 表示键,V 表示值,E 表示异常或错误,T 表示一般意义上的数据类型。...一个参数,也被称为一个类型变量,是用于指定一个类型名称的标识符。 类型参数能被用来声明返回值类型,并且能作为方法得到的实际参数类型的占位符。 方法体的声明和其他方法一样。..." + n); } } 上面的代码中定义了一个方法 printPoint(),既有普通参数,也有类型参数类型参数需要放在修饰符后面、返回值类型前面。...一旦定义了类型参数,就可以在参数列表、方法体和返回值类型使用了。 与使用不同,使用方法时不必指明参数类型,编译器会根据传递的参数自动查找出具体的类型

50130

Java背后是什么?

尽量来写,而且我认为一个好的架构师,业务的抽取是离不开的定义。...>通配符和区别是在你不知道类型的时候,可以用通配符来定义,下面通过一个例子来看看<?...通配符不能定义在上面、接口或方法上,只能作用在方法的参数上 其他的几种情况自己去尝试,正确的使用通配符: public void setClass(Class 表示上限、表示下限 为了演示这两个通配符的作用,增加了一个: //新增加的一个BaseCommon public class...在实际开发中其实知道什么时候定义什么类型就ok,在mvp实际案例中用得比较广泛,大家可以根据实际项目来找找的感觉,只是面试的时候需要理解类型擦除是针对谁而言的。

22530

Kotlin的委托属性和区间

委托 委托方法也可以被声明成的,这样一来不同类型的属性就可以复用同一个委托了。...private var maxDelay: Long by SharedPreferencesDelegate() 然而,如果像上例那样对基本类型使用委托的话,即便声明的基本类型非空,也会在每次读写属性的时候触发装箱和拆箱的操作...说明:对于非空基本类型的委托属性来说,最好使用给定类型的特定委托而不是委托来避免每次访问属性时增加装箱的额外开销。...需要注意的是,lazy() 并不是内联函数,传入的 lambda 参数也会被编译成一个额外的 Function ,并且不会被内联到返回的委托对象中。...这是 Kotlin 1.1 编译器可以优化的一个点。至少通过这些特定的区间避免了装箱操作。 说明:尽量使用时直接声明非空基本类型的区间,不要间接调用,来避免额外区间的创建。

1.3K70

Kotlin入门潜修之类和对象篇—及其原理

而假如我们在创建类型的时候也为其指定参数,这个参数又是个类型,那么我们就称之为。 那么的作用和意义是什么?使用能够像传递参数一样传递类型,同时保证运行时的类型安全。...这也就是和使用Object相比(所有类型都可以用基Object表示),一个优势所在。...声明方法的时候为其指定了类型参数T。 } } 上例简单展示了的定义,上面的T可以传入任何类型进行表示,这就相当于一个入参,只不过这个入参是个类型而已。...星号映射的对应的几种类型使用场景阐述如下(假设现在我们为GenericClass定义了几种): 对于GenericClass这种来讲,GenericClass...fun m1(t: T) {//可以在中定义方法,只需要方法的入参化即可。

89730

精通Java,却不了解

它的本质就是参数类型,也就是所操作的数据类型被指定为一个参数。这种参数类型可以用在 、接口和方法 中,分别被称为 接口和方法 2....使用场景 1) 基本语法 class 名称 { private 标识 变量名; ..... } 使用示例 class Result{ private...那么如果我们定义了一个,构造对象的时候却没有声明数据类型,那么默认为 Object 类型,取出数据的时候则需要进行类型转换: Result objectRes = new Result("testObejct...T> 用于声明此方法为方法 只有声明了 的方法才是方法,就算返回值类型中的使用的成员方法也并不是方法 表明该方法将使用类型 T,此时才可以在方法中使用类型...T 使用示例 private Result getResult(T data) { return new Result(data); } 方法与可变参数: private <

48110

只用这一篇Java的文章,保证你面试对答如流

使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在、接口和方法中,分别被称为接口、方法。...为什么使用使用时,可以通过Object来实现参数的“任意化”,但这样做的缺点就是需要显式的强制类型转换,这就需要开发者知道实际的类型。...在学习这三种类型使用场景之前,我们需要明确一个基本准则,那就是的声明通常都是通过配合大写字母来定义的,比如。只不过不同类型,声明的位置不同,使用的方式也有所不同。...由尖括号()分隔的类型参数部分跟在名后面。它指定类型参数(也称为类型变量)T1,T2,…和 Tn。一般将中的名称为原型,而将指定的参数称为类型参数。...打印结果: t=abc t=123 关于方法总结一下就是:如果能使用方法尽量使用方法,这样能将所需到最需要的范围内。如果使用,则整个都进行了化处理。

95730

Java5新特性及使用

的本质是参数类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在、接口和方法中,分别称为接口、方法。 2....接口 中的类型参数几乎可以用于任何可以使用接口名、名的地方。...方法 (1). 定义方法 方法使得该方法能独立于而产生变化。以下是一个基本的指导原则:无论何时,只要你能做到,你就应该尽量使用方法。...extends T): 可以接收T类型或者其子类型的对象。 下界(? super E): 可以接收T类型或者其父类型的对象。 6. 总结 类型参数只能是类型,不能是基本数据类型。...类型参数可以有多个。 所有类型参数在编译时都会被擦除。 创建对象时请指明类型,让编译器尽早的做参数检查。 不能创建数组。如果想要创建数组,建议使用ArrayList。

1.2K30

JAVA类型擦除

的本质是参数类型,这种参数类型可以用在、接口和方法的创建中。...的定义与使用 根据使用情况可以分为以下三种: 方法 接口 下面是一个常用的: // 一个,可以根据需要包装不同结果的返回值 public class Result...// 返回值类型定义前的是必须的,用来声明一个类型持有者名称,然后就可以把T当作一个类型代表来声明成员、参数和返回值类型。...} // getter & setter } 类型参数 上面尖括号中的T类型参数,代指任何使用时可以替换成任意,如: public class Main { public static...通配符 如果在某些场景下我们不关注(或者不那么关注)对象的类型参数,可以使用通配符。

1.7K40

Java进阶-集合(3)与

属性声明:如private data_type1 property_name1; 一般用于中的属性类型不确定的情况下 在实例化时,需要指明中的类型参数,并赋予类属性相应类型的值...方法使得该方法能够独立于而产生变化。如果使用方法可以取代化,那么就应该只使用方法。 一个 static 方法无法访问类型参数。...cs,int userId){} 一般来说编写 Java 方法,其返回值类型至少有一个参数类型,且类型应该是一致的,如果只有返回值类型参数类型之一使用,那么这个方法的使用就被限制了...5.2 示例 使用方法打印图书信息。定义方法,参数类型使用T”来代替。...} } //result //1 java编程 20 6、高级用法 除在集合、和方法中使用还有如下高级用法 6.1 限制可用类型 语法:class 名称,anyClass指某个接口或

24621

深入理解 Java

为什么需要 JDK5 引入了机制。 为什么需要呢?回答这个问题前,先让我们来看一个示例。...避免类型转换 未使用: List list = new ArrayList(); list.add("hello"); String s = (String) list.get(0); 使用:... 的语法形式: class name { /* ... */ } 的声明和非的声明类似,除了在名后面添加了类型参数声明部分。...由尖括号()分隔的类型参数部分跟在名后面。它指定类型参数(也称为类型变量)T1,T2,...和 Tn。 一般将中的名称为原型,而将 指定的参数称为类型参数。...未应用出现之前,如果一个想持有一个可以为任意类型的数据,只能使用 Object 做类型转换。

39220

,有点难度,会让很多人懵逼,那是因为你没有看这篇文章!

关于的解析上面,我们需要先了解一些和接口,这些比较关键,这些都位于java.lang.reflect包中,图如下: ? 下面一个个来解释。...TypeVariable接口 这个接口表示的是变量,例如:List中的T就是类型变量;而class C1{}表示一个,这个中定义了3个变量类型,分别是T1、T2和...参数1名称,参数2类型 参数2名称) 变量需要在方法名称前面的括号中定义 方法中可以定义多个变量,多个变量之间用逗号隔开 变量可以通过extends关键字指定上边界,上边界可以对变量起到了限定的作用...变量类型在java中使用TypeVariable表示,前3个参数都是变量类型的,所以最后他们的信息都可以使用TypeVariable接口获取,最后一个参数是String类型的,这个是非类型,...@2:创建了方法m1,m1的参数和返回值都是类型的List,类型在java中用ParameterizedType接口表示;而List类型中还有一个类型TT变量类型的,在java

89720

深入理解Java(一.的作用与定义)

”简单的意思就是泛指的类型参数类型)。想象下这样的场景:如果我们现在要写一个容器(支持数据增删查询的),我们写了支持String类型的,后面还需要写支持Integer类型的。然后呢?...这样我们就可以在里面使用定义的类型参数最常用的使用场景就是“元组”的使用。我们知道方法return返回值只能返回单个对象。...Java方法 前面我们介绍的是作用于整个的,现在我们来介绍方法。方法既可以存在于中,也可以存在于普通的中。如果使用方法可以解决问题,那么应该尽量使用方法。...表明该方法将使用类型T,此时才可以在方法中使用类型T。 与的定义一样,此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示。...T next() { return null; } } 如果接口传入类型参数时,实现该接口的实现,则所有使用的地方都要替换成传入的实参类型

1.7K30

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券