我正在尝试从Kotlin调用常规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);
}
Run Code Online (Sandbox Code Playgroud)
在Kotlin,你可以打电话.java给每个KClass.这不是这种情况,我无法从KClass中提取Java Class对象.有办法吗?
功能确实存在,而不是它所在的位置,以及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>
Run Code Online (Sandbox Code Playgroud)
如您所见,该方法的名称在JVM上重命名为getJavaClass.
在您的情况下,您可以尝试:
public <T> T proxy(KClass<T> kClass) {
return (T) proxy(JvmClassMappingKt.getJavaClass(kClass));
}
Run Code Online (Sandbox Code Playgroud)
小智 5
javaObjectType您可以尝试在您的 KClass 上使用
说明:
返回与给定 [KClass] 实例对应的 Java [Class] 实例。对于原始类型,它返回相应的包装类。
例如
Boolean::class.javaObjectType
| 归档时间: |
|
| 查看次数: |
1908 次 |
| 最近记录: |