Как ссылаться на тип объекта Kotlin в Java? - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть объект Kotlin, как показано ниже:

object TestObject {
    val name: String = "Hi"
}

Как бы я сослался на TestObject в Java?Код ниже не понимает TestObject.name:

public class Main {
    public static void main(String[] args) {
        System.out.println(TestObject.name);
    }
}

1 Ответ

7 голосов
/ 25 апреля 2019

Здесь происходит две вещи, обе связаны с тем, как Kotlin / JVM генерирует байт-код Java.(Это детали реализации, которые не видны из другого кода Kotlin, но становятся очевидными при доступе к нему из Java.)

  • Объект-одиночка переводится в класс, и его единственныйэкземпляр хранится в поле этого объекта с именем INSTANCE.

  • Свойство Kotlin состоит из методов доступа (getter и, если доступно для записи, setter) и (при необходимости) поддержкиполе.Они переводятся в приватное поле, а методы с соответствующей видимостью называются обычным способом (getField() и setField() или isField() и setField(), если свойство называется isField).

Собрав это вместе, вы можете сослаться на свойство в вопросе из кода Java как:

TestObject.INSTANCE.getName()

(Полная информация о том, как получить доступ к Kotlin из Java, приведена здесь .)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...