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