为什么我们addAll(Collection)但不是Iterable?

1 java collections arraylist

您可以添加到收藏列表或者提供它作为参数constructor(collection).addAll(Collection)方法.但是,Iterator/Iterable就足够了.如果设计师想要遵循这样一个基本原则:在你所发送的内容中保持自由,在接受的内容中要保守,他们应该接受List或甚至更好地接受ArrayList,因此没有人会发现这种方法有用.那么,为什么他们宁愿停在中间的某个地方呢?

一个类似的问题"为什么有枚举器的Collection.list而不是Iterable/Iterator",一个声誉很高的人回答说这是出于历史原因,可以通过.addAll解决.但是,我不明白addAll他/她在说什么.在这里,我完全是因为我看到它addAll与Iterable/Iterator不兼容.

Aar*_*lla 11

历史:addAll()在Java 1.2中添加,Iterable随Java 5一起提供.

执行SDK的人现在有以下选项:

  1. 替换现有的API(可能会破坏很多代码)或

  2. 添加第二个addAll(Iterable)可能会破坏很多代码.

  3. 什么也不做,这不会破坏任何代码,但会惹恼很多人.

既然"不破坏现有代码"的优先级高于"让人快乐",那就是他们所做的.