如何用Kotlin扩展函数实现通用的Activity Intent创建方法?
用Kotlin扩展函数实现通用的Activity Intent创建方法
当然可以!通过Kotlin的泛型扩展函数+reified关键字,我们能实现一个通用的createIntent方法,彻底告别每个Activity重复编写伴生对象函数的冗余操作。
基础实现代码
直接定义一个针对Activity子类伴生对象的扩展函数:
inline fun <reified T : Activity> T.Companion.createIntent(context: Context): Intent { return Intent(context, T::class.java) }
核心逻辑说明
inline+reified:让函数在编译时保留泛型T的具体类型信息,这样就能直接获取T::class.java作为Intent的目标组件,避免泛型类型擦除问题。T.Companion:表示该扩展函数作用于所有Activity子类的伴生对象(包括系统默认生成的隐式伴生对象),因此调用时直接用Activity类名.createIntent(context)即可,和你原来的调用方式完全一致。
使用方式
无需修改原有调用逻辑,直接复用熟悉的写法:
val intent = MyActivity.createIntent(context) startActivity(intent)
进阶:支持传递参数
如果需要给Intent附加额外参数,可以扩展一个带Lambda的版本,让参数传递更简洁:
inline fun <reified T : Activity> T.Companion.createIntent( context: Context, intentBuilder: Intent.() -> Unit ): Intent { return Intent(context, T::class.java).apply(intentBuilder) }
使用示例:
val intent = DetailActivity.createIntent(context) { putExtra("USER_ID", 123) putExtra("USER_NAME", "张三") } startActivity(intent)
内容的提问来源于stack exchange,提问作者leremjs
相关产品推荐
相关产品推荐

