



Здесь происходят две вещи, обе связанные с тем, как Kotlin/JVM генерирует байт-код Java. (Это детали реализации, которые не видны из другого кода Kotlin, но становятся очевидными при доступе к ним из Java.)
Одноэлементный объект транслируется в класс, а его единственный экземпляр сохраняется в поле этого объекта с именем INSTANCE.
Свойство Kotlin состоит из методов доступа (геттер и, если он доступен для записи, сеттер) и (при необходимости) вспомогательного поля. Они переводятся в закрытое поле, а методы с соответствующей видимостью именуются обычным способом (getField() и setField() или isField() и setField(), если свойство вызывается isField).
Собрав это вместе, вы можете ссылаться на свойство в вопросе из кода Java как:
TestObject.INSTANCE.getName()
(Полная информация о том, как получить доступ к Kotlin из Java, находится в здесь.)
@ochi: Да, Kotlin генерирует аксессор(ы) и резервное поле по мере необходимости. (По крайней мере, Kotlin/JVM имеет; я не знаю о других платформах.) Строго говоря, свойство является является геттером (и, если присутствует, сеттером) — у большинства свойств также есть резервное поле, но у вас его нет. иметь его, если вы переопределяете аксессор(ы). (Именно так работают свойства расширения.) Конечно, синтаксис Kotlin создает впечатление, что вы обращаетесь к полю напрямую, но это не так; Java об этом не знает, так что там более очевидно.
TestObject.INSTANCE это то, что я ищу. Большое спасибо!
вам нужно создать экземпляр
TestObject(т.е.new TestObject().name) - если свойствоnameне являетсяpublic static, тогда вы можете ссылаться наTestObject.name