Я хочу определить, является ли класс JVM классом Котлина или нет

Я хочу сделать специальные функции, если я столкнулся с классом Kotlin по сравнению с общим классом Java. Как я могу определить, является ли это классом Kotlin?

Я надеялся, что вызов someClass.kotlin вызовет исключение или потерпит неудачу, если класс не будет Kotlin. Но он отлично переносит классы Java. Затем я заметил, что если я делаю someClass.kotlin.primaryConstructor он кажется null для всех классов java, даже если у них есть конструктор по умолчанию, это хороший маркер? Но может ли это вернуть значение null для класса Kotlin?

Каков наилучший способ сказать: «Это класс Котлина?»

Котлин добавляет аннотацию ко всем своим классам, и вы можете спокойно проверить его существование по имени. Это детализация реализации и может меняться со временем, но некоторые ключевые библиотеки используют эту аннотацию, поэтому она, вероятно, будет оставаться на неопределенный срок.

 fun Class<*>.isKotlinClass(): Boolean { return this.declaredAnnotations.any { it.annotationClass.qualifiedName == "kotlin.Metadata" } } 

Может использоваться как:

 someClass.isKotlinClass() 

Класс kotlin.Metadata не доступен напрямую, потому что он отмечен как internal в времени выполнения Kotlin.