Java:为什么Collection.addAll不能接受Iterables?

时间:2010-09-30 15:20:16

标签: java iterator iterable

我想知道为什么Collection.addAll()方法只接受其他Collection但不接受Iterable s。那是为什么?

Iterable s做任何类似的方法吗?

5 个答案:

答案 0 :(得分:38)

大概是因为Collection接口是在Java 1.2中引入的,而Iterable只出现在1.5中,而更改接口会破坏所有现有的实现。

答案 1 :(得分:31)

如有疑问,请务必查看番石榴(或Commons):

答案 2 :(得分:10)

其他人已广泛回答“为什么”。

  

为Iterables做任何类似的方法吗?

在Java 8中,您不再需要addAll

Collection<X> coll = ...;
Iterable<X> it = ...;
it.forEach(coll::add); // coll.addAll(it);

答案 3 :(得分:9)

基本上是因为Iterable可能永远不会结束(也就是说,hasNext()永远会返回true。)

另外,为了保持一致性,你可能认为Collection可能会添加另一个集合的所有元素,但是Iterable不一定是一个集合(它可能是任何东西,比如a {例如{1}}包装器。)

答案 4 :(得分:4)

核心JDK中有很多东西与普通的Iterables一样不能正常工作。我建议使用Guava来克服许多这些缺点。