Kotlin:数据类私有setter公共getter

19

在Kotlin数据类中,有没有办法使私有setter和公共getter?

data class Test(var attribute: String) {

    // attribute can be mutated inside this class

    // but outside only readable ?
}
2个回答

34
一个简单的方法是拥有一个私有变量,然后提供一个公共属性来委托它:

一个简单的方法是拥有一个私有变量,然后提供一个公共属性来委托它:

data class Test (private var attribute_ : String) {
  val attribute: String get() = attribute_
}

...除非在我的情况下这并不起作用,因为该字段需要被XStream访问,哼 - xeruf

14

为了补充其他答案的背景:

没有直接在构造函数中实现这一点的方法,尽管已经提出了几个关于如何将其添加到语言中的建议;请参见此处

如果它不是数据类,我建议采用以下替代方案:

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

那种方法只在对象中存储一个值,因此略微更加高效。

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


谢谢提供背景信息。这正是我希望在Kotlin的数据类中看到的:在它们的主构造函数中有非属性成员。 - Dachstein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接