java - kotlin:检查一个类是否是对象类?

标签 java 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的对象呢?

最佳答案

感谢@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 对象。

关于java - kotlin:检查一个类是否是对象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55390926/

相关文章:

java - 部署 WAR 还是 "fat"JAR?

java - Spring SimpleCacheManager更新策略?

java - 尝试使用正则表达式查找出现的数字后跟逗号

javascript - 我如何在没有标准库的情况下使用 KotlinJS?

java - 使用 filewriter 将 CSV 文件从 data.csv 重命名为 timestamp_data.csv

java - Gradle 不下载最新的 Maven 包修改

java - Embedded Solr Server 的使用是否过时且不推荐?

kotlin - 使用协程使函数返回回调中获得的值

android - 如何使用 Kotlin 为 Android 发布版本配置 ProGuard

java - 如何从 Java 使用 Kotlin 反射