Instancia de Kotlin KClass dentro de la function de extensión

Necesito acceder al tipo de class dentro de una function de extensión genérica. Por ejemplo, si deseo hacer una function de extensión para devolver una colección de los miembros del tipo que extiendo, haría:

fun <T> T.getMembers() = this::class.memberProperties 

El problema es que no puedo hacer esto :: class ni T :: class dentro de la function. ¿Hay alguna forma de acceder al tipo de class de un tipo genérico?

En general, no usaría :: para get la class de this , porque this reference a una instancia, no a un tipo. En general, obtendrías la class de this con this.javaClass.kotlin

T hace reference a un tipo, por lo que generalmente haría reference a KClass con T::class .

Sin embargo, en su fragment de código específico ninguno de estos funcionará sin algunos cambios adicionales.

Como el tipo genérico T no está restringido a Any , no puede acceder al campo javaClass. Para agregar la restricción, use:

 fun <T : Any> T.getMembers() = this::class.memberProperties 

Como el tipo genérico no está reificado, no puede usar T::class . Para reificar T, usa:

 inline fun <reified T : Any> T.getMembers() = T::class.memberProperties 

Ver https://kotlinlang.org/docs/reference/inline-functions.html#reified-type-parameters

  • Kotlin y collections inmutables?
  • Corda: error = org.hibernate.InstantiationException: ningún constructor pnetworkingeterminado para la entidad
  • Error de configuration automática del complemento kotlin-gradle
  • Mockito / Powermock no funciona como se esperaba con Kotlin
  • Asociar certificación de desarrollador de Android
  • mover una vista dependiendo de la dirección del deslizamiento
  • Kotlin: delegación de funciones
  • > No se pudo aplicar el complemento > Para la cadena de input: ""
  • Bajo performance de la animation de layouts de paralaje en Android
  • Error de compilation llamando a un método de extensión desde otro método de extensión en Kotlin
  • ¿Hay alguna function de réplica en Kotlin?