Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

504
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!