Есть ли способ сделать частный сеттер и общедоступный геттер в классе данных Kotlin?
data class Test(var attribute: String) {
// attribute can be mutated inside this class
// but outside only readable ?
}
Простым подходом было бы иметь приватную переменную, но затем предоставить публичное свойство, которое делегирует ему:
data class Test (private var attribute_ : String) {
val attribute: String get() = attribute_
}
Чтобы добавить фон к другому ответу:
Невозможно сделать это непосредственно в конструкторе, хотя было несколько предложений о том, как это можно добавить в язык; см. здесь.
Если бы это был не класс данных, я бы предложил эту альтернативу:
class Test(_attribute: String) {
var attribute = _attribute
private set
}
Это сохраняет только одно значение в объекте, поэтому немного более эффективно.
Но поскольку это класс данных, это невозможно. (У классов данных не может быть не свойств в их первичных конструкторах.) Таким образом, предложение другого ответа кажется лучшим.
Спасибо за фон. Это то, что я хотел бы видеть в классах Kotlin Data: иметь не-свойства в их основном конструкторе.