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 对象。
推荐阅读
- spring-mvc - @RequestMapping 注解返回错误的 URL
- icalendar - iCalendar:没有 BYDAY 或 BYMONTHDAY 的每月规则
- css - 单击引导下拉菜单的背景颜色
- python-3.x - 音频可视化:发送音频数据以在 pygame 中进行可视化
- ejabberd - ejabberd-18.12 中钩子 user_receive_packet 的正确语法?
- java - 表单提交一行,但是当添加另一行时,只是得到whitelabel错误页面
- java - 将 HashMap 加载到嵌套配置 bean 会引发绑定异常
- javascript - onClick 操作后打印函数结果
- php - Angular POST 到 PHP:file_put_contents 未写入/错误的提交顺序
- c# - 在 WPF C# 应用程序中执行标准形状实例的深层复制