Java:为什么Collection.addAll不能接受Iterables?
我想知道为什么Collection.addAll()
方法只接受其他Collection
而不是Iterable
。 这是为什么?
任何类似的方法来做这样的Iterable
?
推测是因为Collection
接口是在Java 1.2中引入的,而Iterable
只在1.5中出现,并且改变接口将会破坏所有现有的实现。
如有疑问,请检查番石榴(或下议院):
- 番石榴: Iterables.addAll
- Commons Collections: CollectionUtils.addAll
基本上,因为Iterable
可能永远不会结束(也就是说, hasNext()
永远返回true)。
另外,为了保持一致性,你可能会认为一个Collection
可能会添加另一个集合的所有元素,但是Iterable
并不一定是一个集合(可能是任何东西,比如ResultSet
包装器)。
其他人则广泛地回答了“为什么”。
任何类似的方法来做这件事?
在Java 8中,你不需要addAll
:
Collection<X> coll = ...; Iterable<X> it = ...; it.forEach(coll::add); // coll.addAll(it);
核心JDK中有很多东西不能和普通的Iterables一样工作。 我build议使用番石榴克服很多这些缺点。