2012-03-03 47 views
4

我想知道爲什麼創建了類Collections。從這個類的理論方法可以放在類AbstractCollection。那麼,創建單獨的utils類是什麼原因呢?爲什麼來自集合的方法未放入AbstractCollection中?

+0

[Java Collection和Collections之間的區別](http://stackoverflow.com/ question/1796275/java-collection-and-collections之間的差異) – 2012-03-03 00:02:47

+3

不完全重複。這是'Collections'與'AbstractCollection'。鏈接的問題是「集合」與「集合」。 – Pursuit 2012-03-03 00:06:54

回答

3
  1. 並不是每個集合都延伸到AbstractCollection,這些方法在這裏仍然適用。
  2. 在同一個類中有太多的方法使得當你在Javadoc中工作時,難以理解該類。
  3. 如果您收到來自不可信來電者的Collection,請確保您始終使用相同的實施方式。 unmodifiableCollection可能會有所幫助。
  4. 大多數情況下,您並沒有跟蹤收集的確切實現類型:例如,您編寫了Set<E> set = new HashSet<>();在這種情況下,您將無法使用AbstractCollection中定義的任何不在Collection
+0

你可以舉一個'Collection'類沒有擴展'AbstractCollection'的例子嗎? – mmatloka 2012-03-03 00:06:54

+0

我不確定JDK中有沒有任何例子,但像[Guava](http://guava-libraries.googlecode.com)這樣的第三方項目會一直這樣做:例如,ImmutableCollection層次結構和'ForwardingCollection'層次結構不會擴展'AbstractCollection'。 – 2012-03-03 00:09:01

+0

@mich,你可以實現你自己的Collection,它不會擴展AbstractCollection。這將是一個非AbstractCollection集合的例子。 – 2012-03-03 00:26:50

0

當JDK人決定他們想更多的方法添加到集合類,他們只需要實現它們。例如,在1.6中添加了newSetFromMap。他們不能將更多的方法添加到Collection接口並保持向後兼容性,因爲正如Louis Wasserman所說,並非所有集合都擴展AbstractCollection - 特別是屬於Guava,Commons Collections,Hibernate,OpenJPA等的第三方集合。

這在具有mixin而不是接口的語言中幾乎沒有那麼大的問題。例如,Scala在其集合上有大量的方法。事實上,很多人碰巧遇到了Louis Wasserman的第二個難於閱讀的javadoc(本例中是scaladoc)。

相關問題