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
}

​替换成T:​

fun <T> T.build(block: T.() -> Unit): T {
block()
return this
}

​使用build函数简化Cursor的遍历:​

contentResolver.query(uri, null, null, null, null)?.build {
while(moveToNext()) {
...
}
close()
}