[英]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.