java.util.Collections
目前提供用於創建各種集合接口包裝下面的實用方法:編寫同步線程安全的包裝器的NavigableMap
synchronizedCollection(Collection<T> c)
synchronizedList(List<T> list)
synchronizedMap(Map<K,V> m)
synchronizedSet(Set<T> s)
synchronizedSortedMap(SortedMap<K,V> m)
synchronizedSortedSet(SortedSet<T> s)
類似,它也有6個unmodifiedXXX
重載。
這裏明顯的遺漏是NavigableMap<K,V>
的實用方法。確實,extends SortedMap
,SortedSet extends Set
和Set extends Collection
和Collections
對於SortedSet
和Set
都有專門的實用方法。據推測NavigableMap
是一個有用的抽象,否則它不會在那裏,但它沒有實用的方法。
所以問題是:
- 有爲什麼
Collections
沒有爲NavigableMap
提供實用方法具體原因是什麼? - 你會如何編寫自己的包裝
NavigableMap
?- 在source code for OpenJDK version of
Collections.java
掃視似乎表明,這僅僅是一個「機械」過程- 這是真的,一般你可以添加線程safetiness功能也是這樣嗎?
- 如果是這樣的機械過程,它可以自動化嗎? (Eclipse插件等)
- 此代碼重複是否必要,或者是否可以通過不同的OOP設計模式避免?
- 在source code for OpenJDK version of
Woot!正如它爲「爲什麼?」所說的那樣具有權威性。不過,我現在無法接受這個答案,因爲它錯過了「如何?」。你願意對此發表評論嗎?這仍然是我的問題的重要組成部分。編寫和測試這些「令人頭腦麻木的轉發方法」有多困難?它可以不是半自動的嗎?等 – polygenelubricants 2010-05-16 05:08:26
我只是從'Collections'源文件中複製'靜態類SynchronizedMap'和'靜態類SynchronizedSortedMap',添加你自己的'SynchronizedNavigableMap',它擴展了SynchronizedSortedMap''並且以與兩個複製類相同的方式裝飾缺少的方法確實。這將是很多的代碼,它已經晚了:) – BalusC 2010-05-16 05:14:11
它是這樣一個機械和「頭腦麻木」的過程!人們會認爲它應該是可自動化的! – polygenelubricants 2010-05-16 05:46:59