Преобразование KClass Kotlin в обычный класс в Java

Я пытаюсь вызвать обычный метод Java от Kotlin следующим образом:

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

В Котлин вы можете вызвать .java на каждом KClass. Это не так, и я не могу извлечь объект класса Java из KClass. Есть ли способ сделать это?

Функциональность существует, просто не там, где она кажется, поскольку java является свойством расширения.

Используйте метод JvmClassMappingKt.getJavaClass .

В Kotlin методы расширения (и свойства getters / seters) реализованы как static методы их содержащего класса. Если вы посмотрите на источник для .java ( Ctrl + Q ), вы увидите, что он реализован в JvmClassMapping.kt .

Поскольку функция является уровнем пакета и не имеет содержащего объекта, она просто помещается в файл [Filename]Kt который в этом случае является JvmClassMappingKt .

Вот источник этого свойства расширения:

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

Как вы можете видеть, имя метода переименовывается в JVM для getJavaClass .

В вашем случае вы можете попробовать:

 public <T> T proxy(KClass<T> kClass) { return (T) proxy(JvmClassMappingKt.getJavaClass(kClass)); }