簡體   English   中英

將 java Class<> 轉換為 kotlin 的 KClass<>

[英]Convert java Class<> to kotlin's KClass<>

就像我有一個 kotlin 函數:

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

我想在java代碼中調用這個函數,但這不起作用:

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

在 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'

您可以使用標准庫以這種方式執行此操作:

KClass kotlinClass = Reflection.createKotlinClass(MyClass.class);
KotlinFunc.create(kotlinClass)

在 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));
}

使用KClass<Object> k = new ClassReference(myJavaClass) 來自 2015 年的這個提交: https : //github.com/JetBrains/kotlin/commit/628bb774fd404a307499575fd30c7325e6660d18

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM