我有一个 kotlin 对象和一个 java 类,如:
KotlinObject.kt
object KotlinObject{
....
}
Run Code Online (Sandbox Code Playgroud)
JavaClass.java
class JavaClass {
...
}
Run Code Online (Sandbox Code Playgroud)
和一个 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()
}
}
Run Code Online (Sandbox Code Playgroud)
我可以将 kotlin 对象或 java 类传递给这个函数:
foo(KotlinObject::class.java)
foo(JavaClass::class.java)
Run Code Online (Sandbox Code Playgroud)
那么是否有可能分辨出哪个是 kotlin 的对象?
感谢@Alexey Romanov 在评论中指出 Kotlin 类信息可从Class<*>.
fun foo(cls: Class<*>) {
if (cls.kotlin.objectInstance != null)
println("KotlinObject")
else
println("Other class")
}
Run Code Online (Sandbox Code Playgroud)
我最初的方法是模仿 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")
}
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,任何使用名称“INSTANCE”作为单例字段的 Java 单例也将报告为 Kotlin 对象。
| 归档时间: |
|
| 查看次数: |
2381 次 |
| 最近记录: |