Как сделать недвижимость в Котлине, у которой есть частный геттер (или просто нет), но имеет публичный сеттер?
var status private get
не работает с ошибкой: Getter visibility must be the same as property visibility
В моем случае причина в Java-взаимодействии: я хочу, чтобы мой Java-код мог вызвать setStatus
но не getStatus
.
В настоящее время в Котлине невозможно иметь собственность с сеттера, которая более заметна, чем свойство. В этом вопросе есть проблема с языковым дизайном в этом вопросе, не стесняйтесь смотреть / голосовать за него или делиться своими делами: https://youtrack.jetbrains.com/issue/KT-3110
В текущей версии Kotlin (1.0.3) единственным вариантом является использование отдельного метода сеттера следующим образом:
class Test { private var name: String = "name" fun setName(name: String) { this.name = name } }
Если вы хотите ограничить доступ внешних библиотек к получателю, вы можете использовать internal
модификатор видимости, позволяющий по-прежнему использовать синтаксис свойств в библиотеке:
class Test { internal var name: String = "name" fun setName(name: String) { this.name = name } } fun usage(){ val t = Test() t.name = "New" }