Kotlin实战学习笔记(九 泛型)

2017-12-10  本文已影响0人  Pyrrha_89c6
  1. 泛型类型参数
val <T> List<T>.penultimate: T 
    get() = this.[size - 2]
class StringList: List<String> { //确定了类型都是String
   override fun get(i: Int) : String {...}
}
class ArrayList<T>: List<T>{
    override fun get(i: Int) : T {...}
}
<T extend Type>  //java
<T: Type> // kotlin
//kotlin特有的多个上界约束
fun <T>  foo(p: T) where T: Type1,T: Type2{ ... } //T必须是Type1和Type2的子类或实现类
<T>  == <Any?> //所以类型可为null
<T:Any> // 这样就不能为null了
  1. 运行时类型擦除
value is List<String>  // error,现在的value是List
value is List<*> // pass
inline fun <reified T> isA (value: Any) = value is T
// Kotlin 自带函数
list.filterIsInstance<T>() // 过虑为T类型的数据
  1. 变型
    见P250
    kt: <out T> ~= java :<? extends T> //只做生成类型,kotlin叫协变
    kt: <in T> ~= java :<? super T> //只做消费类型,kotlin叫逆变
上一篇 下一篇

猜你喜欢

热点阅读