有什么办法可以在Kotlin数据类中创建私有设置者和公共获取者?
data class Test(var attribute: String) {
// attribute can be mutated inside this class
// but outside only readable ?
}
答案 0 :(得分:5)
一种简单的方法是拥有一个私有var,然后提供一个委托给它的公共属性:
data class Test (private var attribute_ : String) {
val attribute: String get() = attribute_
}
答案 1 :(得分:1)
为其他答案添加背景:
尽管已经有一些关于如何将其添加到语言中的建议,但是无法直接在构造函数中执行此操作;参见here。
如果它不是数据类,我建议使用以下替代方法:
class Test(_attribute: String) {
var attribute = _attribute
private set
}
那只会在对象中存储一个值,因此效率更高。
但是由于这是一个数据类,所以不可能。 (数据类在其主要构造函数中不能具有非属性)。因此另一个答案的建议似乎是最好的。