将java Class<>转换为kotlin的KClass<>

2022-09-02 03:12:31

就像我哈瓦一个kotlin函数:

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

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

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

答案 1

可以通过在Java中调用函数来实现:getKotlinClass

kotlin.jvm.JvmClassMappingKt.getKotlinClass(MyClass.class);

你可以像这样调用你的函数:

kotlin.reflect.KClass<MyClass> kClass = kotlin.jvm.JvmClassMappingKt.getKotlinClass(MyClass.class);
KotlinFunc.create(kClass);

并确保它位于您的类路径中,例如:kotlin-reflect

与Gradle Kotlin:

dependencies {
    ...
    implementation(kotlin("reflect"))
    ...
}

与Gradle Groovy:

dependencies {
    ...
    implementation 'org.jetbrains.kotlin:kotlin-reflect'
    ...
}

答案 2

在 Kotlin 中有一个扩展属性 .kotlinClass

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

在Java中,它将在类中显示为静态方法。<T> KClass<T> getKotlinClass(Class<T>)kotlin.jvm.JvmClassMappingKt


推荐