首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin:公共getter返回不可变列表,但私有getter应返回可变列表

Kotlin:公共getter返回不可变列表,但私有getter应返回可变列表
EN

Stack Overflow用户
提问于 2020-12-03 05:06:02
回答 1查看 200关注 0票数 2

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

代码语言:javascript
复制
   class GrammarParser {
    private val grammars: List<Grammar> = mutableListOf()
    get() = field.toList()
   }

试一试

代码语言:javascript
复制
 class GrammarParser {
    private val _grammars: MutableList<Grammar> = mutableListOf()
    val grammars: List<Grammar>
    get() = this._grammars.toList()
   }

我试过了,但不确定这是不是很好的做法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-03 06:21:40

在Kotlin中,每个MutableList<T>也是一个List<T>。因此,您可以在私有字段中创建一个MutableList,并声明一个指向同一对象的List类型的附加字段。在类内部,您可以使用可变引用来修改列表,并向外部公开List

示例:

代码语言:javascript
复制
class GrammarParser {
    private val mutableGrammars = mutableListOf<Grammar>()
    val grammars: List<Grammar> = mutableGrammars
}

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65116128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档