¿Cómo acceder al object compañero de Kotlin en Java?

Convierto una de mis classs de Java a Kotlin y la class de la siguiente manera.

class MainApplication : Application() { companion object { operator fun get(context: Context): MainApplication { return context.applicationContext as MainApplication } } } 

Tiene una function estática get .

Todavía tengo una function de Java accediéndolo.

 MainApplication application = MainApplication.get(mContext); 

Fue bueno cuando MainApplication está en Java. Pero no cuando MainApplication en Kotlin, el error de código anterior

 Error:(27, 54) error: cannot find symbol method get(Context) 

¿Cómo podría acceder a get mi código Java arriba?

Puede agregar la anotación @JvmStatic al método en el object complementario para hacer que Kotlin genere un método estático.

 class MainApplication : Application() { companion object { @JvmStatic fun get(context: Context): MainApplication { return context.applicationContext as MainApplication } } } 

a continuación, puede acceder desde Java como antes de convertir a Kotlin:

 MainApplication application = MainApplication.get(mContext); 

EDITAR: Me siento obligado a agregar algo que aprendí recientemente: @JvmStatic realidad no se mueve donde se genera el método. Lo duplica generando un método estático para Java además del método en el object complementario. Personalmente, creo que esto no es genial y puede tener algunas implicaciones dependiendo de un caso de uso, por lo que es algo que vale la pena conocer.

Ops, lo tengo. Solo usa lo siguiente.

 MainApplication application = MainApplication.Companion.get(mContext); 

Al omitir el nombre de su object compañero, se debe usar el nombre Companion para acceder a los methods.

Ejemplo:

 class MyClass1 { companion object Object1 { fun method1 { } } } class MyClass2 { companion object { fun method2 { } } } 

Para invocar el primer método de object complementario, haría lo siguiente:

 MyClass1.method1() 

Para invocar el segundo:

 MyClass2.Companion.method2() 

Consulte los documentos de Kotlin sobre los objects acompañantes para get más detalles.

  • Convierta la actividad principal con la barra de acciones / barra de herramientas y el button de acción flotante a Anko
  • Procesamiento de annotations de Kotlin: ¿es posible generar un método de extensión?
  • El complemento IdeaVim de IntelliJ inhabilita la conversión de Java a Kotlin
  • Reflexión de Kotlin: creación de objects desde CSV
  • kotlin + espresso: No se encontraron actividades
  • Convierta methods obsoletos de Java a Kotlin
  • Cómo deserializo JSON en una list <SomeType> con Kotlin + Jackson
  • Kotlin spring-boot @ConfigurationProperties
  • ¿Cómo puedo restringir que un parámetro de function de extensión Kotlin sea el mismo que el tipo extendido?
  • ¿Cuál es la forma correcta de tratar con los campos en Kotlin?
  • error en la anotación de Kotlin?