# Groovy 注入展开操作符

**URL:** <https://www.isharkfly.com/t/groovy/1944>\
**Category:** 程序语言\
**Created:** [December 15, 2012, 2:11am UTC](https://www.isharkfly.com/t/groovy/1944 "2012-12-15T02:11:30Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [December 15, 2012, 2:11am UTC](https://www.isharkfly.com/t/groovy/1944/1 "2012-12-15T02:11:30Z")

</div>

Groovy 提供了一个\*展开操作符来连接到涉及到的 list 的展开点操作符，这看起来就像使用逗号分隔的对象来创建 list 列表的相反操作，展开操作符按顺序分配 list 中所有的条目给接收者，这样接受的方法可以有多个参数，或者有一个 list 的参数。

这有什么好处？假设你有一个方法，这个方法在一个列表中返回多个结果，并且你的代码需要将这些参数传递给第二个方法，展开操作符分配列表中的所有结果为第二个方法的参数：[code]def getList(){

return [1,2,3]

}

def sum(a,b,c){

return a + b + c

}

assert 6 == sum(\*list)  
[/code]这样在接受方法单独声明每一个参数的时候，我们可以方便的传递多个参数给该方法。

使用展开操作符进行展开操作同样在 range 上及展开一个 list 中的条目到另一个 list 中也是可以工作的：[code]def range = (1…3)

assert [0,1,2,3] == [0,\*range]  
[/code]相同的戏法同样可以应用在 map 上：[code]def map = [a:1,b:2]

assert [a:1, b:2, c:3] == [c:3, \*:map]  
[/code]展开操作符淘汰了合并 list、range 和 map 需要的代码，你将在 10.3 节看到这个练习，这个操作符有助于实现一个用来进行数据库访问的用户命令语言。

如前面显示的断言，展开操作符在表达式中使用是十分方便的，支持在过程风格上的函数式编程风格，在过程风格中，你可以使用这样的语句 list.addAll(otherlist)。

现在，看看 groovy 最后的强劲特性，用这个特性你可以指派新的方法给任何 Groovy或者 java 类。
