将Java Class <>转换为Kotlin的KClass <>

时间:2019-03-27 03:37:09

标签: java kotlin

就像我有一个kotlin函数一样:

object KotlinFunc {
    @JvmStatic
    fun create(mycls: KClass<*>) {...}
}

我想用Java代码调用此函数,但这不起作用:

public void javaFunc() {
   KotlinFunc.create(MyClass.class)
}

4 个答案:

答案 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