like I hava a kotlin function:
object KotlinFunc {
@JvmStatic
fun create(mycls: KClass<*>) {...}
}
I want to invoke this function in java code, but this not working:
public void javaFunc() {
KotlinFunc.create(MyClass.class)
}
It is possible by using calling the getKotlinClass function in Java:
kotlin.jvm.JvmClassMappingKt.getKotlinClass(MyClass.class);
you can invoke your function like this:
kotlin.reflect.KClass<MyClass> kClass = kotlin.jvm.JvmClassMappingKt.getKotlinClass(MyClass.class);
KotlinFunc.create(kClass);
and make sure that kotlin-reflect is in your classpath, e.g.:
with Gradle Kotlin:
dependencies {
...
implementation(kotlin("reflect"))
...
}
with Gradle Groovy:
dependencies {
...
implementation 'org.jetbrains.kotlin:kotlin-reflect'
...
}
You can do it this way using the standard library:
KClass kotlinClass = Reflection.createKotlinClass(MyClass.class);
KotlinFunc.create(kotlinClass)
In Kotlin Class has an extension property .kotlin.
It is declared in kotlin.jvm.JvmClassMapping.kt (source code).
In Java it will look as a static method <T> KClass<T> getKotlinClass(Class<T>) in the class kotlin.jvm.JvmClassMappingKt.