Kotlin:数据类私有设置程序public getter

时间:2019-05-28 23:08:27

标签: kotlin

有什么办法可以在Kotlin数据类中创建私有设置者和公共获取者?

data class Test(var attribute: String) {

    // attribute can be mutated inside this class

    // but outside only readable ?
}

2 个答案:

答案 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
}

那只会在对象中存储一个值,因此效率更高。

但是由于这是一个数据类,所以不可能。 (数据类在其主要构造函数中不能具有非属性)。因此另一个答案的建议似乎是最好的。