我想知道为什么Collection.addAll()
方法只接受其他Collection
但不接受Iterable
s。那是为什么?
为Iterable
s做任何类似的方法吗?
答案 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来克服许多这些缺点。