我想知道爲什麼創建了類Collections
。從這個類的理論方法可以放在類AbstractCollection
。那麼,創建單獨的utils類是什麼原因呢?爲什麼來自集合的方法未放入AbstractCollection中?
回答
- 並不是每個集合都延伸到
AbstractCollection
,這些方法在這裏仍然適用。 - 在同一個類中有太多的方法使得當你在Javadoc中工作時,難以理解該類。
- 如果您收到來自不可信來電者的
Collection
,請確保您始終使用相同的實施方式。unmodifiableCollection
可能會有所幫助。 - 大多數情況下,您並沒有跟蹤收集的確切實現類型:例如,您編寫了
Set<E> set = new HashSet<>();
在這種情況下,您將無法使用AbstractCollection
中定義的任何不在Collection
。
你可以舉一個'Collection'類沒有擴展'AbstractCollection'的例子嗎? – mmatloka 2012-03-03 00:06:54
我不確定JDK中有沒有任何例子,但像[Guava](http://guava-libraries.googlecode.com)這樣的第三方項目會一直這樣做:例如,ImmutableCollection層次結構和'ForwardingCollection'層次結構不會擴展'AbstractCollection'。 – 2012-03-03 00:09:01
@mich,你可以實現你自己的Collection,它不會擴展AbstractCollection。這將是一個非AbstractCollection集合的例子。 – 2012-03-03 00:26:50
可能有一段時間你想實現一個獨立的對象,它實現了接口Collection
之一,而不擴展AbstractCollection。
例如:http://commons.apache.org/collections/api-release/org/apache/commons/collections/bag/HashBag.html
好吧,讓我們公平一點:那是因爲'Bag'故意違反'Collection'合同。 – 2012-03-03 23:32:10
當JDK人決定他們想更多的方法添加到集合類,他們只需要實現它們。例如,在1.6中添加了newSetFromMap。他們不能將更多的方法添加到Collection接口並保持向後兼容性,因爲正如Louis Wasserman所說,並非所有集合都擴展AbstractCollection - 特別是屬於Guava,Commons Collections,Hibernate,OpenJPA等的第三方集合。
這在具有mixin而不是接口的語言中幾乎沒有那麼大的問題。例如,Scala在其集合上有大量的方法。事實上,很多人碰巧遇到了Louis Wasserman的第二個難於閱讀的javadoc(本例中是scaladoc)。
- 1. AbstractCollection的用途是什麼
- 2. AbstractCollection爲什麼不實現iterator()?
- 3. 爲什麼AbstractCollection沒有實現equals()?
- 4. 爲什麼AbstractCollection實現了Iterable和Collection?
- 5. 爲什麼jQuery中的.add()方法對集合進行排序?
- 6. 爲什麼Java集合不提供方便的映射方法?
- 7. 爲什麼ForEach方法僅在列表<T>集合中?
- 8. 在執行AbstractCollection的toArray方法時代碼的用法是什麼
- 9. 爲什麼命名C++ STL集合的容器的count()方法?
- 10. 在Meteor中放置一個集合的安全方法是什麼?
- 11. 爲什麼集合方法'包含'工作,如果集合有關係?
- 12. 未定義的方法,爲什麼?
- 13. 未定義的方法 'delete_car_user_path',爲什麼
- 14. 此方法未將對象插入到ArrayList中。爲什麼?
- 15. 爲什麼「基於集合的方法」比「程序方法」更好?
- 16. 什麼是習慣方法來創建一個方法的參考集合採取自我?
- 17. 爲什麼Controls集合不提供所有IEnumerable方法?
- 18. 爲什麼canvas drawImage方法縮放?
- 19. 爲什麼我的寫入方法未初始化?
- 20. 在DesignMode中編輯集合的最簡單方法是什麼?
- 21. 什麼是Haskell中多指標集合最習慣的方法?
- 22. 從集合中刪除項目的建議方法是什麼?
- 23. 集合中下面的方法有什麼區別
- 24. 爲什麼方法不在自定義異常中輸入?
- 25. mro:爲什麼來自父母的方法都被調用?
- 26. 爲什麼迭代器<E>迭代器()放在收集,類AbstractCollection當已經在可迭代
- 27. 如何將所有來自BrowserGallery的TextInput值放入PowerApps的集合中?
- 28. NDB的_post_delete_hook方法中的未來參數有什麼用處?
- 29. 爲什麼異步方法需要返回未來?
- 30. 爲什麼我的UserProperties集合爲空?
[Java Collection和Collections之間的區別](http://stackoverflow.com/ question/1796275/java-collection-and-collections之間的差異) – 2012-03-03 00:02:47
不完全重複。這是'Collections'與'AbstractCollection'。鏈接的問題是「集合」與「集合」。 – Pursuit 2012-03-03 00:06:54