Спасибо @Alexey Romanov за указание в комментариях, что информация о классе Kotlin доступна из Class<*>
.
fun foo(cls: Class<*>) {
if (cls.kotlin.objectInstance != null)
println("KotlinObject")
else
println("Other class")
}
Мой оригинальный подход состоял в том, чтобы подражать Котлинсу 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")
}
Имейте в виду, что любой Java-синглтон, использующий имя 'INSTANCE' для синглтонного поля, также будет сообщаться как объект Kotlin в этом случае.