Kotlin(2.8)泛型

来源:互联网 发布:大数据应用启示录 编辑:程序博客网 时间:2024/06/06 01:05

2-知识点汇总

1、如何使用泛型

//类似Java的声明class Box<T>(t: T) {    var value = t}val box: Box<Int> = Box<Int>(1) //完整形式val box = Box(1) //可推测出时,可以省略参数类型。

2、和Java区别

  1. Java有通配符(wildcard type),Kotlin没有
  2. Kotlin中有declaration-site variance(声明-位置 变化量)和type projections(类型预测)

3、Java中的泛型

  1. Java中泛型是不变量:List不是List的子类
  2. Java中应该使用泛型限制List<? extends E>,使得List是其子类。
  3. List
fun copy(from: Array<out Any>, to: Array<Any>) {  // ...}

表明from不仅是数组,而且是被保护的。

7、使用点变化量:相反于形如Java中Array

fun fill(dest: Array<in String>, value: String) {    // ...}

这等于Array<? super Object>,可以传入CharSequence或者object的数组。

8、‘*’星号预测

!!!!!

9、泛型函数
一般泛型函数:泛型在函数名前

fun <T> singletonList(item: T): List<T> {    // ...}

扩展函数:T.fun()

fun <T> T.basicToString() : String {  //扩展函数    // ...}

10、泛型的限制:Upper bounds

fun <T : Comparable<T>> sort(list: List<T>) {    // ...}

T必须为Comparable的子类。

11、需要两个及以上限制:
使用where包含

fun <T> copyWhenGreater(list: List<T>, threshold: T): List<String>    where T : CharSequence, //两个限制          T : Comparable<T> {    return list.filter { it > threshold }.map { it.toString() }}
原创粉丝点击