就像我有一个kotlin函数一样:
object KotlinFunc {
@JvmStatic
fun create(mycls: KClass<*>) {...}
}
我想用Java代码调用此函数,但这不起作用:
public void javaFunc() {
KotlinFunc.create(MyClass.class)
}
答案 0 :(得分:2)
您可以使用标准库来做到这一点:
KClass kotlinClass = Reflection.createKotlinClass(MyClass.class);
KotlinFunc.create(kotlinClass)
答案 1 :(得分:2)
可以在Java中使用类似的方法
public static <T> KClass<T> getKClass(Class<T> cls){
return JvmClassMappingKt.getKotlinClass(cls);
}
,并且还必须确保Kotlin-reflect位于类路径中,例如:
implementation group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: '1.3.21'
答案 2 :(得分:1)
在Kotlin中,Class
具有扩展名.kotlin
。不幸的是,我找不到它的声明位置,但是在Java中,它应该看起来像一个静态方法<T> KClass<T> getKotlin(Class<T>)
。
找不到此方法,您可以在Kotlin中创建一个辅助方法:
// in ReflectHelper.kt
fun <T> toKClass(cls: Class<T>) = cls.kotlin
// from Java
public void javaFunc() {
KotlinFunc.create(ReflectHelperKt.toKClass(someMyClass.class));
}
答案 3 :(得分:0)
使用KClass<Object> k = new ClassReference(myJavaClass)
。
从2015年的这次提交开始:https://github.com/JetBrains/kotlin/commit/628bb774fd404a307499575fd30c7325e6660d18