Estoy utilizando tanto Kotlin y java en mi base de código. Pero me preguntaba si hay una manera de que pueda hacer referencia a una función Kotlin de java? Aquí está mi código Kotlin: MyEvent.kt
open class MyEvent {
@Inject
lateinit var myService: MyService
@Inject
lateinit var app: MyApp
var name: String = ""
var options: MutableMap<String, String> = hashMapOf()
var metrics: MutableMap<String, Double> = hashMapOf()
init {
app.component.inject(this)
}
fun identify() {
myService.identify()
}
}
Ahora, en mi aplicación de base de la llamada clase "MyApplication", quiero llamar a identificar la función. (Me. Sé que en Kotlin podemos hacerlo a través de MyEvent (). Identificar), pero preguntaba cómo hacemos para que en java? ¿Cualquier pista?
¡Gracias por adelantado!
Es exactamente lo mismo en Java. Tenga en cuenta que comparten el mismo subyacente código de bytes .
final MyEvent myEvent = new MyEvent();
myEvent.identify();
Mira el código de bytes producido para la Kotlin MyEvent
clase (descompilación)
public class my/package/MyEvent {
...
public final identify()V
L0
LINENUMBER 14 L0
RETURN // Omitted myService.identify()
...
Un companion
objeto se traduce a una static
propiedad de clase en Java.
Por ejemplo, para este código Kotlin
open class MyEvent {
companion object {
fun test() = ""
}
...
}
Este es el código de bytes resultante
static <clinit>()V
NEW my/package/MyEvent$Companion
DUP
ACONST_NULL
INVOKESPECIAL my/package/MyEvent$Companion.<init> (Lkotlin/jvm/internal/DefaultConstructorMarker;)V
PUTSTATIC my/package/MyEvent.Companion : Lmy/package/MyEvent$Companion;
RETURN
MAXSTACK = 3
MAXLOCALS = 0
}
Lo que significa, básicamente,
public class MyEvent {
public static final Companion Companion = new Companion(...);
...
}
Así, en Java es posible acceder a ella usando
MyEvent.Companion.test();
por
open class MyEvent {
object Factory {
fun test() = ""
}
...
}
Sería, en Java
MyEvent.Factory.INSTANCE.test();
En última instancia Java no tiene el concepto de objetos de compañía.
En su lugar, static
propiedades y métodos se utilizan.