Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

513
Vistas
¿Cómo llamo a una función escrita en una clase de kotlin, en Java?

Estoy usando tanto Kotlin como Java en mi base de código. Pero me preguntaba si hay alguna manera de hacer referencia a una función de Kotlin desde 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 llamada de clase de aplicación base "MyApplication", quiero llamar a la función de identificación. (Sé que en kotlin podemos hacer esto a través de MyEvent().identify) pero me preguntaba cómo lo hacemos en Java. ¿Cualquier pista?

¡Gracias por adelantado!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Es exactamente lo mismo en Java. Tenga en cuenta que comparten el mismo código de bytes subyacente.

 final MyEvent myEvent = new MyEvent(); myEvent.identify();

Mire el código de bytes producido para la clase Kotlin MyEvent (descompilado)

 public class my/package/MyEvent { ... public final identify()V L0 LINENUMBER 14 L0 RETURN // Omitted myService.identify() ...

Un objeto companion se traduce a una propiedad de clase static en Java.
Por ejemplo, para este código Kotlin

 open class MyEvent { companion object { fun test() = "" } ... }

Este es el bytecode 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(...); ... }

Entonces, en Java accederías usando

 MyEvent.Companion.test();

Para

 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 complementarios.
En su lugar, se utilizan propiedades y métodos static .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda