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()
}