我希望我的类有一个字段,它为所有公共访问返回一个不可变的列表,但在对象示例中,我希望列表是可变的,这样我就可以向其中添加元素。
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()
}
我试过,但不确定这是否是良好的做法?
1条答案
按热度按时间jyztefdp1#
在Kotlin,每个
MutableList<T>
也是一个List<T>
. 所以,你可以创建一个MutableList
并声明一个类型为List
指向同一个物体。在类内部,可以使用可变引用修改列表,并公开List
到外面去。例子:
在第二个示例中,每次调用getter时都创建列表的副本(快照)。这意味着,在你打电话给getter并得到一个列表之后,即使
_grammars
如果在其他地方进行了修改,所做的更改将不会反映在您获得引用的只读列表视图中。这可能是你想要的东西-那么你正在做的是好的。但如果你不是在寻找,那么我上面给出的例子将避免复制。