Kotlin 检查传递的参数是否为类的类型
我想调用以下函数:Kotlin 检查传递的参数是否为类的类型,kotlin,Kotlin,我想调用以下函数: fun <T> isCurrentActivity( t: Class<T>): Boolean { return (currentActivity != null) && (currentActivity is t) } if (isCurrentActivity(MainActivity::class.java)) { } fun isCurrentActivity(t:Class):布尔值{ 返回(currentA
fun <T> isCurrentActivity( t: Class<T>): Boolean {
return (currentActivity != null) && (currentActivity is t)
}
if (isCurrentActivity(MainActivity::class.java)) {
}
fun isCurrentActivity(t:Class):布尔值{
返回(currentActivity!=null)&&(currentActivity为t)
}
if(isCurrentActivity(MainActivity::class.java)){
}
但t是一个未解析的引用。我怎样才能解决这个问题?我不能使用内联具体化函数,因为该函数需要公开可用。问题在于JVM擦除泛型类型,因此在运行时无法访问参数t的类型 这就是为什么Java中流行的模式将
类的实例作为参数传递。Kotlin中不需要它,因为在Kotlin中我们可以定义具体化的类型,并且该类型在运行时可以访问
例如:
inline fun <reified T> isCurrentActivity(): Boolean {
return (currentActivity != null) && (currentActivity is T)
}
fun example() {
if (isCurrentActivity<MainActivity>()) {
// it is!
}
}
请参阅@gidds对上述检查的评论
但是,我仍然建议使用具体化的类型参数,因为这是检查类型的一种非常好的方法。与相当的是检查将是t.isInstance(currentActivity)
。检查javaClass
不是一个直接的等价项,因为如果currentActivity
是T
的子类型,则检查失败。
fun <T> isCurrentActivity(t: Class<T>): Boolean {
return (currentActivity != null) && currentActivity.javaClass == t
}