Kotlin: ¿Java no puede resolver el símbolo de Kotlin?

Tengo un código de Kotlin al igual que el siguiente, SingleKotlin.instance puede ser llamado por los otros files de Kotlin

 class SingleKotlin private constructor(){ companion object { val instance by lazy { SingleKotlin() } } } 

Sin embargo, cuando bash llamar a SingleKotlin.instance desde java, muestra que no puede resolver el símbolo 'instancia'

No entiendo por qué, cualquiera puede explicar y cómo puedo resolver este problema.

Simplemente agregue la anotación @JvmField arriba del campo (como se indica en esta documentation https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html#static-fields )

Entonces, tu código debería ser así:

 class SingleKotlin private constructor(){ companion object { @JvmField val instance by lazy { SingleKotlin() } } } 

Y ahora puedes llamarlo así

 SingleKotlin.instance 

Además de la respuesta de @YuriiKyrylchuk : otra opción (y la única opción si no tienes control sobre el código de Kotlin) es referirte a MyClass.Companion desde Java. Ejemplo:

 class MyClass { companion object { val x: Int = 0 } } 

Y en Java:

 MyClass.Companion.getX(); 

Si su object SingleKotlin tiene un único constructor privado sin parameters, puede usar object lugar:

 object SingleKotlin { // some members of SingleKotlin val x = 42 } 

Luego en Java lo reference a través del campo estático INSTANCE :

 SingleKotlin single = SingleKotlin.INSTANCE; // or SingleKotlin.INSTANCE.getX(); 

Debe llamar al método desde Java de esta manera:
AppUIUtils.Companion.yourMethod()

Además de la respuesta de Ilya puedes usar la anotación @JvmStatic

 object SingleKotlin { // some members of SingleKotlin @JvmStatic val x = 42 } 

Entonces en Java

 SingleKotlin.getX();