Conversión de KClass de Kotlin a class regular en Java

Estoy intentando llamar a un método Java normal de Kotlin de la siguiente manera:

public <T> T proxy(KClass<T> kClass) { // unfortunately nothing like getJavaClass() exists return (T) proxy(kClass.getJavaClass()); } public <T> T proxy(Class<T> jClass) { return (T) context.getBean(jClass); } 

En Kotlin, puede llamar a .java en cada KClass. Este no es el caso aquí y no puedo extraer el object de la class Java de KClass. ¿Hay una manera de hacerlo?

La funcionalidad existe, simplemente no donde parece, ya que java es una propiedad de extensión.

Use el método JvmClassMappingKt.getJavaClass .

En Kotlin, los methods de extensión (y los getters / setters de properties) se implementan como methods static de su class contenedora. Si miras la fuente de .java ( Ctrl + Q ), puedes ver que está implementado en JvmClassMapping.kt .

Como la function es a nivel de package y no tiene un object contenedor, simplemente se coloca en el file [Filename]Kt que en este caso es JvmClassMappingKt .

Aquí está la fuente de esta propiedad de extensión:

 @Suppress("UPPER_BOUND_VIOLATED") public val <T> KClass<T>.java: Class<T> @JvmName("getJavaClass") get() = (this as ClassBasedDeclarationContainer).jClass as Class<T> 

Como puede ver, el nombre del método se renombra en la JVM para get getJavaClass .

En tu caso, puedes intentar:

 public <T> T proxy(KClass<T> kClass) { return (T) proxy(JvmClassMappingKt.getJavaClass(kClass)); } 
  • Error: no se puede resolver la versión para la dependencia 'org.jetbrains.kotlin: kotlin-stdlib-jre7: jar'
  • ¿Por qué mi compilation Kotlin falla utilizando Kotlin-Maven-Plugin?
  • Kotlin accede a la class Java
  • La propiedad en la interfaz no puede tener un campo de respaldo
  • Android carga varios documentos Firerestre
  • Ejecutar testings unitarias no capta cambios
  • Tipos de unión / interfaces de extensión
  • No puede detenerse en la exception en IntelliJ IDEA mientras escribe el código de Kotlin
  • ¿Cuál es la mejor manera de encontrar un elemento en las lists anidadas?
  • JNI: Lectura y escritura de buffer directo
  • Escribir JSP en kotlin con maven - Error instanciando la class de servlet, ClassNotFoundException