kotlin:public getter返回不可变列表,而private getter应该返回可变列表

6jygbczu  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(342)

我希望我的类有一个字段,它为所有公共访问返回一个不可变的列表,但在对象示例中,我希望列表是可变的,这样我就可以向其中添加元素。

class GrammarParser {
    private val grammars: List<Grammar> = mutableListOf()
    get() = field.toList()
   }

试试看

class GrammarParser {
    private val _grammars: MutableList<Grammar> = mutableListOf()
    val grammars: List<Grammar>
    get() = this._grammars.toList()
   }

我试过,但不确定这是否是良好的做法?

jyztefdp

jyztefdp1#

在Kotlin,每个 MutableList<T> 也是一个 List<T> . 所以,你可以创建一个 MutableList 并声明一个类型为 List 指向同一个物体。在类内部,可以使用可变引用修改列表,并公开 List 到外面去。
例子:

class GrammarParser {
    private val mutableGrammars = mutableListOf<Grammar>()
    val grammars: List<Grammar> = mutableGrammars
}

在第二个示例中,每次调用getter时都创建列表的副本(快照)。这意味着,在你打电话给getter并得到一个列表之后,即使 _grammars 如果在其他地方进行了修改,所做的更改将不会反映在您获得引用的只读列表视图中。这可能是你想要的东西-那么你正在做的是好的。但如果你不是在寻找,那么我上面给出的例子将避免复制。

相关问题