gpt4 book ai didi

kotlin - 将 Kotlin 的 KClass 转换为 Java 中的常规 Class

转载 作者:IT老高 更新时间:2023-10-28 13:42:19 32 4
gpt4 key购买 nike

我正在尝试在 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com