groovy list api创建新列表与修改当前列表

时间:2015-07-13 14:56:44

标签: collections groovy immutability

无法理解为什么groovy list api会有类

的方法

a)允许修改当前列表

b)返回一个新列表,

e.g。

aList-['Hello','World']

// modifying a list
aList.set(2,'Modifying') //will modify aList itself, i.e. aList=['Hello','World','Modifying'

//create a new list without modifying self
aList.plus(1,'Worlds')   //aList is not modified, although this statements creates a new list: ['Hello','Worlds','Modifying']

我的问题是:为什么Groovy的作者不会坚持使用标准,即要么拥有完全不可变的集合,要么所有方法都要返回新的列表实例而不修改当前的集合实例,或者允许这样的方法作为'加'修改当前集合。对此有两个标准似乎有点不直观。

1 个答案:

答案 0 :(得分:1)

Groovy包装Java并允许您调用现有的Java方法。

因此set是一个操纵基础列表的Java method。因此,在Groovy中,它只是调用此方法并且您改变列表。

minusplusleft-shift是Groovy的补充,因此对于列表,它们的编写不会改变原始列表。

说到地图,left-shift会改变地图,但我想这只是你必须记住的事情。