转换java类<&燃气轮机;到kotlin';s KClass<&燃气轮机;

转换java类<&燃气轮机;到kotlin';s KClass<&燃气轮机;,java,kotlin,Java,Kotlin,就像我有一个kotlin函数: object KotlinFunc { @JvmStatic fun create(mycls: KClass<*>) {...} } 您可以使用标准库以这种方式执行此操作: KClass kotlinClass = Reflection.createKotlinClass(MyClass.class); KotlinFunc.create(kotlinClass) 在Kotlin类中具有扩展属性。Kotlin。不幸的是,我找不到它

就像我有一个kotlin函数:

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

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

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

在Kotlin
类中
具有扩展属性
。Kotlin
。不幸的是,我找不到它的声明位置,但在Java中它应该看起来是一个静态方法
KClass getKotlin(Class)

如果找不到此方法,可以在Kotlin中创建一个助手方法:

// in ReflectHelper.kt
fun <T> toKClass(cls: Class<T>) = cls.kotlin

// from Java
public void javaFunc() {
    KotlinFunc.create(ReflectHelperKt.toKClass(someMyClass.class));
}
//在ReflectHelper.kt中
趣味类(cls:Class)=cls.kotlin
//来自Java
public void javaFunc(){
create(ReflectHelperKt.toKClass(someMyClass.class));
}

在Java中使用类似的东西是可能的:

public static <T> KClass<T> getKClass(Class<T> cls){
    return JvmClassMappingKt.getKotlinClass(cls);
}
使用
KClass k=newclassreference(myJavaClass)

从2015年的这次提交中:

可以在Kotlin中执行,因此可以从Java调用它。你是对的。我已经从
kotlin stdlib
kotlin reflect
更新了答案,以便使用适当的方法将java
Class
转换为kotlin
KClass
JvmClassMappingKt
kotlin stdlib
中声明@Ilya我在
kotlin stdlib
中找不到
JvmClassMappingKt
我确信您仍然需要
kotlin reflect
@MohamedAouledIssa该类的完全限定名是
kotlin.JvmClassMappingKt
,它位于
kotlin stdlib
工件。请注意,这是该类在Java代码中的外观,而不是在Kotlin代码中的外观。代码在编译时没有Kotlin reflect,但在未包含该类时存在运行时异常,因此它毕竟是必需的。我不确定这是否会将Java类映射到Kotlin类。诀窍是使用kotlin反射
JavaToKotlinClassMap
,如果您谈论的是不将例如
java.lang.String
转换为
kotlin.String
,那么问题并不要求这样做。
public static <T> KClass<T> getKClass(Class<T> cls){
    return JvmClassMappingKt.getKotlinClass(cls);
}
implementation group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: '1.3.21'