Android开发里常用的Kotlin 泛型 配合 高阶函数手记
为什么要使用这种东西
声明变量的x作用域,使其更加便于管理
比如这个,很好的例子
fun <T : View> AndroidView(
factory: (Context) -> T, // 受影响:必须返回 T
modifier: Modifier, // 不受影响:跟 T 没关系
update: (T) -> Unit // 受影响:必须接收 T 作为入参
)
同样的,还有其他好处,就是比如这个写在第一排的形参 (直接把一个表达式(函数)传进去了还算形参吗?
这样就可以不用把创建的对象直接传进去
避免在不需要的时候再次创建对象(这是昂贵的
(应该是上一级(或者更底层实现的
fun <T : View> MyCustomAndroidView(
factory: (Context) -> T,
它在做什么
一样的,比如写个简单的版本
fun <T : SU>/*可以限制*/ fixSU(
//这里就可以把表达式传入(成为高阶
facFun: (INPUT) -> T;
//其他参数也可以进入它的作用域
fucInput: (T)
)
写了一段过编译的
fun main() {
println(facUI(BigUI()))
println(facUI(SmallUI()))
}
open class BigUI{
open var layout = 1;
open fun UIF (layout : Int ) : Int {
return layout*2;
}
}
class SmallUI : BigUI(){
override var layout = 0;
override fun UIF ( layout : Int ) : Int{
return layout*2;
}
}
fun <T : BigUI> facUI (UI : T) :Int {
return UI.layout;//在这里占位,等待转换,不需要在这里指定
}

浙公网安备 33010602011771号