Groovy集合方法addAll()适用于单个对象,但这样使用它是否安全?

时间:2015-01-29 15:18:08

标签: groovy

虽然搞乱我意识到我可以做像someList.addAll(someObject)...而不是使用.add(someObject)。这似乎没有记录,并且在调用一个或另一个之前执行此操作而不是检查对象实例的类型会很好。以这种方式使用它是否安全?

3 个答案:

答案 0 :(得分:1)

因为它完全是:

def l = []
l.addAll('a')
l.addAll(['a'])

assert l == ['a', 'a']

在groovy括号中可以省略,在这两种情况下都会调用this方法。

答案 1 :(得分:1)

我认为在大多数情况下这可以安全使用,但正如Dave Newton指出的那样,如果添加的数据没有受到严格控制,有时可能会失败。 (即addAll(someInt))。因为我无法预测将来会使用我的代码,以及他们如何尝试使用它,所以我将坚持测试传入的值并适当地使用add或addAll。虽然我喜欢简单,但有时我认为明确和冗长更好。 :)

谢谢大家!

答案 2 :(得分:0)

虽然官方文档的varargs section为空,但是groovy遵循约定,所以如果方法的最后一个参数声明为Object [],则可以使用varargs调用 。除了introduction to groovy之外,我还没有找到对该约定的引用。

所以我想在调用someList.addAll(someObject)时会遵循varargs约定,最终会调用Collection.addAll(Object\[\])

所以我会说以这种方式使用是安全的。