Kotlin中isCurrentActivity函数t未解析引用问题求助(无法用inline reified)
修复
isCurrentActivity函数的未解析引用问题 这个问题我之前也碰到过,核心是混淆了类型字面量和Class实例的用法,咱们一步步来解决:
问题根源
你写的currentActivity is t里,is运算符要求右侧是具体的类型(比如MainActivity),但t是一个Class<T>对象——这两者不是同一个东西,编译器没法把t当成类型来解析,所以才会抛出"未解析引用"的错误。既然没法用inline reified,就得换一种符合Kotlin/Java类型检查规则的方式。
修复方案
直接用Class类自带的isInstance()方法,这个方法专门用来判断对象是否属于该Class所代表的类(或其子类)的实例,和is运算符的行为完全一致。
修改后的函数代码如下:
fun <T> isCurrentActivity(t: Class<T>): Boolean { // isInstance会自动处理currentActivity为null的情况(返回false),无需额外判空 return t.isInstance(currentActivity) }
调用方式保持不变
你原来的调用代码完全可以继续用,不需要做任何修改:
if (isCurrentActivity(MainActivity::class.java)) { // 执行你的业务逻辑 }
额外说明
如果你需要严格匹配类(不包含子类),可以把判断逻辑改成:
fun <T> isCurrentActivity(t: Class<T>): Boolean { return currentActivity?.javaClass == t }
不过这种场景比较少见,大多数情况下isInstance()更符合我们用is运算符时的预期(允许子类实例匹配)。
内容的提问来源于stack exchange,提问作者Johann
相关产品推荐
相关产品推荐

