将Kotlin的KClass转换为Java中的常规类
我正在尝试从Kotlin调用一个常规的Java方法,如下所示:
public T proxy(KClass kClass) { // unfortunately nothing like getJavaClass() exists return (T) proxy(kClass.getJavaClass()); } public T proxy(Class jClass) { return (T) context.getBean(jClass); }
在Kotlin中,您可以在每个KClass上调用.java
。 这不是这种情况,我无法从KClass中提取Java类对象。 有没有办法做到这一点?
这个function确实存在,只是看起来没有,因为java
是一个扩展属性。
使用方法JvmClassMappingKt.getJavaClass
。
在Kotlin中,扩展方法(和属性获取器/设置器)被实现为其包含类的static
方法。 如果您查看.java
的源代码( Ctrl + Q ),则可以看到它在JvmClassMapping.kt
实现。
由于该函数是包级别的,并且没有包含对象,因此只将它放入文件[Filename]Kt
,在这种情况下,该[Filename]Kt
是JvmClassMappingKt
。
这是这个扩展属性的来源:
@Suppress("UPPER_BOUND_VIOLATED") public val KClass .java: Class @JvmName("getJavaClass") get() = (this as ClassBasedDeclarationContainer).jClass as Class
如您所见,该方法的名称在JVM上重命名为getJavaClass
。
在你的情况下,你可以尝试:
public T proxy(KClass kClass) { return (T) proxy(JvmClassMappingKt.getJavaClass(kClass)); }