Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 检查传递的参数是否为类的类型_Kotlin - Fatal编程技术网

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
}