天天看点

【kotlin】Kotlin笔记19-泛型(T)

Kotlin笔记19-泛型和委托-T

12.1 泛型和委托

  • 泛型的基本用法
T: 泛型
序号 Tips
定义方式 一种是定义泛型类,另一种是定义泛型方法
T 语法结构: < T>
< T> 这里的T不是固定的,可以为其他字母单词,T是一种约定俗成的泛型写法

泛型类

​Example:​

class MyClass<T>{
    fun method(param:T):T{
        return param
    }
}      

​调用:​

val myClass=MyClass<Int>()//指定成Int
val result=myClass.method(123)//此时就可以接收一个Int型参数,返回值也变成Int型      

泛型方法

​Example:不想定义泛型类,只定义泛型方法​

class MyClass1{
    fun <T> method(param:T):T{
        return param
    }
}      

​调用:​

val myClass = MyClass1()
val result = myClass.method<Int>(123)
//当然出色的类型推导直接可以让我们这么写
val resul = myClass.method(123)      

对泛型类型进行限制

​通过指定上界的方式对泛型类型进行约束:​

//指定上界
class MyClass2 {
    fun <T : Number> method(param: T): T {
        return param
    }
}      
序号 Tips
解释1 我们只能将method()方法指定成数字类型,比如Int, Float, Double等
2 指定成字符串类型就会报错
3 泛型的上界默认是Any?, 非空上界是Any

小试牛刀-实现和apply函数一样的功能

​回顾:​

fun StringBuilder.build1(block:StringBuilder.()->Unit):StringBuilder {
    block()
    return this
}      
fun <T> T.build(block: T.() -> Unit): T {
    block()
    return this
}      
contentResolver.query(uri, null, null, null, null)?.build {
  while(moveToNext()) {
    ...
  }
  close()
}