在 Java
中,如果我们要获取函数的泛型类型,一般会通过给函数中传递类型参数的方式,如下所示:
public <T extends Activity> void startActivity(Context context, Class<T> c) {
context.startActivity(new Intent(context, c));
}
如果上述代码使用 kotlin
来写呢?如下所示:
inline fun <reified C : Activity> Context.startActivityKtx() {
startActivity(Intent(this, C::class.java))
}
我们利用 扩展函数 +
reified
关键字的方式,减少了模版代码,增强了使用体验。从而让本该在编译阶段被擦除的Activity类型,能够在运行时获取到。
但需要注意的是,reified
关键字必须和 inline
关键字一起使用(下面会提到为什么)。
inline 关键字是什么呢?
简单理解为:当一个函数被标记为
inline
时,kotlin编译器 会在所有调用这个函数的位置,将方法函数替换为具体的函数体。
解析
通过查看 kotlin 字节码,我们