我正在尝试在 Java 代码中调用常规 Java 方法,如下所示:
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);
}
在 Kotlin 中,您可以在每个 KClass 上调用 .java
。这不是这里的情况,我无法从 KClass 中提取 Java Class 对象。有办法吗?
编辑:这在 Kotlin 中是微不足道的,但我正在寻找 Java 代码中的解决方案。
最佳答案
功能确实存在,只是不存在,因为java
是一个扩展属性。
使用方法JvmClassMappingKt.getJavaClass
。
在 Kotlin 中,扩展方法(和属性 getter/setter)被实现为其包含类的 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));
}
关于kotlin - 将 Kotlin 的 KClass 转换为 Java 中的常规 Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45231961/