更多精彩内容,欢迎关注我的微信公众号——Android机动车。
无论是Java还是Kotlin,泛型都是一个非常重要的概念,简单的泛型应用很容易理解,不过也有理解起来麻烦的时候。
泛型基础
在了解Kotlin的泛型之前,先来看看Java中的泛型:
举个栗子:在JDK中,有一类列表对象,这些对象对应的类都实现了List接口。List中可以保存任何对象:
List list=new ArrayList();
list.add(55);
list.add("hello");
上面的代码中,List中保存了Integer和String两种类型值。尽管这样做是可以保存任意类型的对象,但每个列表元素就失去了原来对象的特性,因为在Java中任何类都是Object的子类,这样做的弊端就是原有对象类型的属性和方法都不能再使用了。
但在定义List时,可以指定元素的数据类型,那么这个List就不再是通用的了,只能存储一种类型的数据。JDK1.5之后引入了一个新的概念:泛型。
所谓泛型,就是指在定义数据结构时,只指定类型的占位符,待到使用该数据结构时再指定具体的数据类型:
public class Box<T> {
private T t;
public Box(T t) {
this.t = t;
}
}
Box<Integer> box=new Box(2);
在Kotlin中同样也支持泛型,下面是Kotlin实现上面同样的功能:
class Box<T>(t: T) {
var value = t
}
var box: Box<