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

  1. 泛型类型参数
  • 类型参数要么被显示的声明出来,要么可以推导(和Java不同)
  • 函数声明
    fun <T> List<T>.slice(indices: IntRange): List<T>
  • 扩展属性
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. 运行时类型擦除
  • 和Java一样List<T> 会被擦除为List
value is List<String>  // error,现在的value是List
value is List<*> // pass
  • 用inline函数实现对泛型的检查
inline fun <reified T> isA (value: Any) = value is T
// Kotlin 自带函数
list.filterIsInstance<T>() // 过虑为T类型的数据
  • 带reified的inline函数不能在Java中调用
  1. 变型
    见P250
    kt: <out T> ~= java :<? extends T> //只做生成类型,kotlin叫协变
    kt: <in T> ~= java :<? super T> //只做消费类型,kotlin叫逆变
  • 点变 P254
    书上大概说的是: <out T>可读不可变可作为方法的返回值<in T>可变不读可作为方法是参数
  • <*> == <?>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,399评论 9 118
  • Kotlin 知识梳理系列文章 Kotlin 知识梳理(1) - Kotlin 基础Kotlin 知识梳理(2) ...
    泽毛阅读 7,365评论 0 4
  • 不重要的废话 前段时间看了一遍《Programming Kotlin》,主要目的是想提高自己的英文阅读能力,能力提...
    珞泽珈群阅读 8,699评论 1 7
  • 第8章 泛型 通常情况的类和函数,我们只需要使用具体的类型即可:要么是基本类型,要么是自定义的类。但是在集合类的场...
    光剑书架上的书阅读 6,380评论 6 10
  • 01 万里云山,长风冷月。风景为千年而生,他为众生惊世。 曾经那个世间最美的情郎,雪域的王,被光阴的苔藓覆盖,有一...
    无他书单阅读 1,170评论 2 4