二十一、Android-泛型的高级特性

60 阅读1分钟

21.1 对泛型进行实化

  1. 函数必须是内联函数,即用inline关键字修饰的函数
  2. 声明泛型的地方必须加上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)
}

这样用起来就方便很多了,可以应用更多的地方。