簡體   English   中英

為什么集合中的方法沒有放在AbstractCollection中?

[英]Why methods from Collections were not put in AbstractCollection?

我想知道為什么要創建類Collections 理論上,這個類中的方法可以放在AbstractCollection類中。 那么創建單獨的utils類的原因是什么?

  1. 並非每個集合都擴展了AbstractCollection ,這些方法仍然適用於那里。
  2. 在同一個類中有太多的方法會讓你在通過Javadoc工作時更難理解這個類。
  3. 如果您從不受信任的調用者那里收到一個Collection ,那么確保您總是使用相同的實現,例如unmodifiableCollection可能會有所幫助。
  4. 大多數情況下,您不會跟蹤集合的確切實現類型:例如,您編寫Set<E> set = new HashSet<>(); 在這種情況下,您將無法使用AbstractCollection中定義的任何不在Collection

可能有一段時間你想要實現一個獨立的Object,它實現了Collection接口之一,而沒有擴展AbstractCollection。

例如: http//commons.apache.org/collections/api-release/org/apache/commons/collections/bag/HashBag.html

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

在具有mixins而不是接口的語言中,這幾乎沒有問題。 例如,Scala在其集合中擁有大量方法。 事實上,很多人都遇到過Louis Wasserman的第二個難以閱讀的問題(在這種情況下是scaladoc)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM