21.1 对泛型进行实化
- 函数必须是内联函数,即用inline关键字修饰的函数
- 声明泛型的地方必须加上reified关键字,表示该泛型要进行实化
inline fun <reified T>getGenericType() {
}
inline fun <reified T> getGenericType() = T::class.java
// 或者
inline fun <reified T> getGenericType() : Class<T> {
return T::class.java
}
getGenericType<String>()
getGenericType<Int>()
21.2 泛型实化的应用
启动一个Activity
val intent = Intent(context, TestActivity::class.java)
context.startActivity(intent)
封装
inline fun <reified T> startActivity(context: Context) {
val intent = Intent(context, T::class.java)
context.startActivity(intent)
}
// 调用时就可以
startActivity<TextActivity>(context)
添加可携带参数的封装,添加一个新的startActivity的重载
inline fun <reified T> startActivity(context: Context, block: Intent.() -> Unit) {
val intent = Intent(context, T::class.java)
intent.block()
context.startActivity(intent)
}
// 调用时就可以
startActivity<TextActivity>(context) {
putExtra("params1", "data")
putExtra("params2", 123)
}
这样用起来就方便很多了,可以应用更多的地方。