Преобразовать Java-класс <> в Kotlin KClass <> - PullRequest
5 голосов
/ 27 марта 2019

как у меня есть функция kotlin:

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

Я хочу вызвать эту функцию в коде Java, но это не работает:

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

Ответы [ 3 ]

5 голосов
/ 27 марта 2019

Это возможно, используя что-то подобное в Java:

public static <T> KClass<T> getKClass(Class<T> cls){
    return JvmClassMappingKt.getKotlinClass(cls);
}

и вы также должны убедиться, что kotlin-рефлексы находятся в вашем классе, например ::1004*

implementation group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: '1.3.21'
3 голосов
/ 27 марта 2019

Вы можете сделать это, используя стандартную библиотеку:

KClass kotlinClass = Reflection.createKotlinClass(MyClass.class);
KotlinFunc.create(kotlinClass)
2 голосов
/ 27 марта 2019

В Котлине 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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...