Kotlin: частный сеттер класса данных публичный геттер - PullRequest
1 голос
/ 29 мая 2019

Можно ли как-то сделать частный установщик и публичный получатель в классе данных Kotlin?

data class Test(var attribute: String) {

    // attribute can be mutated inside this class

    // but outside only readable ?
}

Ответы [ 2 ]

5 голосов
/ 29 мая 2019

Простой подход состоит в том, чтобы иметь приватную переменную, но затем предоставить открытое свойство, которое ей делегируется:

data class Test (private var attribute_ : String) {
  val attribute: String get() = attribute_
}
2 голосов
/ 29 мая 2019

Чтобы добавить некоторый фон к другому ответу:

Нет способа сделать это непосредственно в конструкторе, хотя было несколько предложений относительно того, как его можно добавить в язык;см. здесь .

Если бы это не был класс данных, я бы предложил эту альтернативу:

class Test(_attribute: String) {
    var attribute = _attribute
        private set
}

, которая хранит только одно значение в объекте, поэтомунемного более эффективен.

Но так как это класс данных, это невозможно.(Классы данных не могут иметь не-свойств в своих первичных конструкторах.) Так что предложение другого ответа кажется лучшим.

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