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 } } } 

Solutions Collecting From Web of "Reflexión de Kotlin: compruebe si la propiedad tiene tipo"

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.