首页 > 解决方案 > kotlin:检查一个类是否是对象类?

问题描述

我有一个 kotlin 对象和一个 java 类,例如:

KotlinObject.kt

object KotlinObject{
....
}

Java类.java

class JavaClass {
...
}

和一个 kotlin 函数来检查:

fun foo(cls: Class<*>): Any {
   if (cls is kotlin's object) { //how to do this?
      return ?  //wanna return object's instance
   } else {
      return cls.newInstance()
   }    
}

我可以将 kotlin 对象或 java 类传递给这个函数:

foo(KotlinObject::class.java)
foo(JavaClass::class.java)

那么有可能分辨出哪个是 kotlin 的对象吗?

标签: javakotlin

解决方案


感谢@Alexey Romanov 在评论中指出 Kotlin 类信息可从Class<*>.

fun foo(cls: Class<*>) {
    if (cls.kotlin.objectInstance != null)
        println("KotlinObject")
    else
        println("Other class")
}

我最初的方法是模仿 Kotlins KClass.objectInstance

我保留它以供参考,但请使用上面的解决方案。

fun foo(cls: Class<*>) {
    val objectInstance = cls.declaredFields.firstOrNull {
        it.type == cls && it.name == "INSTANCE"
    }

    if (objectInstance != null)
        println("KotlinObject")
    else
        println("Other class")
}

请注意,在这种情况下,任何使用名称“INSTANCE”作为单例字段的 Java 单例也将被报告为 Kotlin 对象。


推荐阅读