Kotlin(2.8)泛型

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() }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值