Quiero detectar si una class JVM es una class Kotlin o no

Quiero hacer una funcionalidad especial si encuentro una class Kotlin en comparación con una class Java genérica. ¿Cómo puedo detectar si es una class de Kotlin?

Esperaba que llamar a someClass.kotlin arrojara una exception o fallara si la class no era Kotlin. Pero envuelve las classs de Java muy bien. Entonces noté que si hago someClass.kotlin.primaryConstructor parece ser null para todas las classs de Java incluso si tienen un constructor pnetworkingeterminado, ¿es eso un buen marcador? Pero, ¿puede eso devolver null para una class Kotlin también?

¿Cuál es la mejor manera de decir "¿es ésta una class de Kotlin?"

Kotlin agrega una anotación a todas sus classs, y usted puede verificar su existencia por su nombre de manera segura. Este es un detalle de implementación y podría cambiar con el time, pero algunas bibliotecas key usan esta anotación por lo que es probable que esté bien por time indefinido.

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

Se puede usar como:

 someClass.isKotlinClass() 

La class kotlin.Metadata no se accede directamente porque está marcada como internal en el time de ejecución de Kotlin.

  • La delegación de propiedad kotlin alias lanza Exception
  • ¿Cómo obtengo una KProperty1 de una KProperty0?
  • Configurar la reflexión de kotlin, class.java no funciona
  • Los literales de class Kotlin con el lado izquierdo vacío aún no son compatibles.
  • ¿Cómo get una KClass de Array?
  • ¿Cómo get una class de time de ejecución de una variable en Kotlin?
  • Kotlin, cómo recuperar el valor del campo a través de la reflexión
  • Crear una nueva instancia de una KClass
  • ¿Cómo cambiar un campo de miembro con la reflexión de Kotlin?
  • por qué SomeClass :: class es KClass <SomeClass> pero esta :: class es KClass <out SomeClass>
  • Llamadas a function de logging usando reflexión en kotlin