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

Ted*_*Ted 6 java kotlin

就像我有一个kotlin函数:

object KotlinFunc {
    @JvmStatic
    fun create(mycls: KClass<*>) {...}
}
Run Code Online (Sandbox Code Playgroud)

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

public void javaFunc() {
   KotlinFunc.create(MyClass.class)
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*nov 13

在 Kotlin 中Class 有一个扩展属性.kotlin

kotlin.jvm.JvmClassMapping.kt它在(源代码)中声明。

在 Java 中,它将看起来像<T> KClass<T> getKotlinClass(Class<T>)类中的静态方法kotlin.jvm.JvmClassMappingKt


urg*_*ntx 10

您可以使用标准库以这种方式执行此操作:

KClass kotlinClass = Reflection.createKotlinClass(MyClass.class);
KotlinFunc.create(kotlinClass)
Run Code Online (Sandbox Code Playgroud)


bir*_*eee 6

可以通过在Java中使用以下代码来实现:

public static <T> KClass<T> getKClass(Class<T> cls){
    return JvmClassMappingKt.getKotlinClass(cls);
}
Run Code Online (Sandbox Code Playgroud)

并且还必须确保kotlin-reflect在您的类路径中,例如:

implementation group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: '1.3.21'
Run Code Online (Sandbox Code Playgroud)

  • `kotlin-reflect` 不应该被要求将 java `Class&lt;&gt;` 转换为 kotlin `KClass&lt;&gt;`。`JvmClassMappingKt` 在 `kotlin-stdlib` 中声明。 (3认同)