Reflexión de Kotlin: compruebe si la propiedad tiene tipo

Quiero iterar sobre todos los campos en una de mis classs, filtrar para los anotados y luego verificar si el campo tiene un tipo específico.
Todo lo que encontré fue field.returnType.isSubtype(other: KType) pero no sé cómo get el KType de mi otra class.

Aquí está mi código hasta ahora:

 target.declanetworkingMemberProperties.forEach { if (it.findAnnotation<FromOwner>() != null) { if ( /* it.returnType is Component <- Here I need some working check */ ) { // do stuff } else { // do ther stuff } } } 

Hay al less dos soluciones aquí:

  • Obtenga la KClass<*> de it.returnType con .jvmErasure , luego verifique la relación de subtipo para KClass es:

     it.returnType.jvmErasure.isSubclassOf(Component::class) 
  • Desde Kotlin 1.1, puede build el KType desde el token de KClass utilizando .createType() (verifique sus parameters opcionales: puede usarlos para proporcionar información de anulabilidad, escribir arguments y annotations), y luego verificar el subtipo como sugirió:

     it.returnType.isSubtypeOf(Component::class.createType()) 

    Crear el tipo en cada iteración puede presentar problemas de performance, asegúrese de almacenarlo en la memory caching si lo necesita con frecuencia.

  • instancia :: class.java vs. instance.javaClass
  • Kotlin comtesting si la function requiere parámetro de instancia
  • ¿Cómo get una KClass de Array?
  • Acceda al tipo de delegado de Kotlin sin una instancia
  • Reflexión de KFlin KFunction - get valores de parameters
  • Cómo acceder a los objects-miembros de una statement de object en kotlin
  • Determinar si una instancia es una instancia de una class de datos
  • ¿Cómo puedo crear una instancia de un object usando valores de parameters de constructor pnetworkingeterminados en Kotlin?
  • ¿Cómo cambiar un campo de miembro con la reflexión de Kotlin?
  • Obtén la function por nombre dinámicamente en Kotlin
  • ¿Cómo puedo get una reference a un object Kotlin por su nombre?