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