我正在阅读 Kotlin 文档。在不变性领域,他们在下面评论。我想知道我们为什么要这样做?当我尝试示例代码时,它的行为相同。
不变性
更喜欢使用不可变数据而不是可变数据。始终声明局部变量 和属性作为 val 而不是 var,如果它们在之后没有被修改 初始化。
始终使用不可变的集合接口(集合、列表、设置、 映射 ) 来声明未变异的集合。使用工厂时 函数创建集合实例,始终使用 尽可能返回不可变的集合类型:
// Bad: use of mutable collection type for value which will not be mutated fun validateValue(actualValue: String, allowedValues: HashSet<String>) { ... } // Good: immutable collection type used instead fun validateValue(actualValue: String, allowedValues: Set<String>) { ... } // Bad: arrayListOf() returns ArrayList<T>, which is a mutable collection type val allowedValues = arrayListOf("a", "b", "c") // Good: listOf() returns List<T> val allowedValues = listOf("a", "b", "c")
更新:对于任何投票否决我的人。在写这个问题之前,我读了这本书,尝试了这个例子并尝试搜索。所以我没有足够的经验来解释或理解上面的段落。让我们考虑一下你对这个社区的贡献。如果我做错了,请告诉我。不要只单击一个按钮。
作为Mr.@Akavall和Mr.@Naetmul的建议。我再次阅读了listOf
方法的文档。问题我错过了listOf
方法返回无法添加任何新项的列表对象。
我认为您应该比较可变列表和列表。两者都是 接口,而 ArrayList 是来自 Java 的具体类。 ArrayList 在 Kotlin 中实现了 MutableList。可变列表 扩展列表,添加不在 最初列出。