Como llamar una función escrita en una clase Kotlin, en Java?

Marissa Nicholas:

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!

LppEdd:

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 MyEventclase (descompilación)

public class my/package/MyEvent {
  ...

  public final identify()V
   L0
    LINENUMBER 14 L0
    RETURN // Omitted myService.identify()
  ...

Un companionobjeto se traduce a una staticpropiedad 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, staticpropiedades y métodos se utilizan.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=188383&siteId=1
Recomendado
Clasificación