我希望我的类有一个字段,它为所有公共访问返回一个不可变的列表,但在对象实例中,我希望列表是可变的,这样我就可以向其中添加元素。
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()
}我试过了,但不确定这是不是很好的做法?
发布于 2020-12-03 06:21:40
在Kotlin中,每个MutableList<T>也是一个List<T>。因此,您可以在私有字段中创建一个MutableList,并声明一个指向同一对象的List类型的附加字段。在类内部,您可以使用可变引用来修改列表,并向外部公开List。
示例:
class GrammarParser {
private val mutableGrammars = mutableListOf<Grammar>()
val grammars: List<Grammar> = mutableGrammars
}在第二个示例中,每次调用getter时都会创建列表的副本(快照)。这意味着,在调用getter并获得一个列表之后,即使在其他地方修改了_grammars,更改也不会反映在您获得引用的只读列表视图中。这可能是你想要的东西--然后你所做的就是好的。但如果这不是你要找的东西,那么我上面给出的例子可以避免复制。
https://stackoverflow.com/questions/65116128
复制相似问题