首页 文章

为什么总是要使用不可变的集合接口来声明在Kotlin中没有变异的集合?

提问于
浏览
0

我正在读Kotlin文档 . 在Immutability部门,他们在下面评论 . 我想知道为什么要这样做?当我尝试示例代码时,它的行为相同 .

不变性首选使用不可变数据进行变异 . 如果初始化后未修改局部变量和属性,则始终将其声明为val而不是var . 始终使用不可变集合接口(Collection,List,Set,Map)来声明未变异的集合 . 使用工厂函数创建集合实例时,请尽可能使用返回不可变集合类型的函数://错误:使用可变集合类型表示不会发生变异的值
fun validateValue(actualValue:String,allowedValues:HashSet <String>
//好:改为使用不可变集合类型
fun validateValue(actualValue:String,allowedValues:Set <String>
//坏:arrayListOf()返回ArrayList <T>,这是一个可变的集合类型
val allowedValues = arrayListOf(“a”,“b”,“c”)
//好:listOf()返回List <T>
val allowedValues = listOf(“a”,“b”,“c”)

更新:对于任何投票给我的人 . 我读了这本书,尝试了这个例子并尝试在写这个问题之前进行搜索 . 所以我没有足够的经验来解释或理解上面的段落 . 让我们考虑一下您为社区做出的贡献 . 如果我做错了,请告诉我 . 不要只点击一个按钮 .

1 回答

  • 2

    正如@ Akavall先生和@ Naetmul先生的建议 . 我再次阅读了 listOf 方法的文档 . 问题是我错过了 listOf 方法返回一个无法添加任何新项目的列表对象 .

    我认为你应该比较MutableList和List . 两者都是接口,而ArrayList是Java的具体类 . ArrayList在Kotlin中实现MutableList . MutableList扩展了List,添加了最初不在List中的可变性功能 .

相关问题