Kotlin 泛型的定义

Kotlin 泛型的定义,现实生活中,我们在整理物品时,会把各种各样的物品放在一个收纳盒中,如剪刀、火机、梳子、头绳等,这个收纳盒相当于是一个容器,该容器中可以放各种物品。如果有一个空的收纳盒,想要知道收纳盒中放什么物品,只有当收纳盒中放了物品之后才会知道放的是什么物品。收纳盒这个容器的概念与JDK系统中的List集合比较类似,List集合也是一个容器,这个容器中也可以放置各种数据类型,如String、Int、Object等。如果想要知道List集合中存放的是什么类型的对象,则必须在该集合存放完对象之后才能知道。

当创建一个空的List集合时,调用List集合中的add()方法,该方法中传递的参数是一个“某种类型”的对象,由于这个“某种类型”是一个不确定的类型,因此可以通过泛型来表示。泛型即“参数化类型”,就是将具体的类型变成参数化类型,在声明一个泛型时,传递的是一个类型形参,在调用时传递的是一个类型实参。

当定义泛型时,泛型是在类型名之后、主构造函数之前用尖括号“<>”括起来的大写字母类型参数。当定义泛型类型变量时,可以完整地写明类型参数,如果编译器可以自动推断类型参数,则可以省略类型参数。

下面我们以ArrayList为例,创建一个泛型,具体示例代码如下:

class ArrayList<E>

上述代码中E表示某种类型,定义时是一个未知类型,称为类型形参。E这个类型类似一个参数,当创建ArrayList实例时,需要传入具体的类型。具体示例代码如下:

var list1 = arrayListOf<String>("aa","bb","cc") 
var list2 = arrayListOf<Long>(111,222,333) 
var list3 = arrayListOf<Int>(1,2)

上述代码中传入的参数String、Long、Int都是类型实参。

接下来我们通过一个例子来了解可以省略的泛型类型参数,具体示例代码如下:

class Box<T>(t: T) { 
    var value = t 
}

上述代码中T表示泛型的类型参数,如果要创建这个类的实例,则需要提供具体的类型参数。具体示例代码如下:

val box: Box<Int> = Box<Int>(1)

如果类型参数可以推断出来,则可以省略类型参数。具体示例代码如下:

val box = Box(1)   //参数1 是Int 类型

由于传递到构造函数中的参数是1,这个参数是一个Int类型的参数,编译器可以推断出泛型的类型是Int类型,因此在创建类的实例时可以省略类型参数。

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!