的我想作的Java集合地圖,所以我可以做類似地圖收藏
public void add(K key, V value) {
if (containsKey(key)) {
get(key).add(value);
} else {
Collection c = new Collection();
c.add(value);
put(key, value);
}
}
我試過的東西,使它象
public class CollectionMap<K, C extends Collection<V>> extends HashMap<K, C>
但編譯器抱怨<V>
部分,並且仍然存在製作適當的新集合的問題。
此刻,我做了兩個類:的setMap看起來像這樣
1: public class SetMap<K, V> extends HashMap<K, Set<V>> {
2:
3: public void add(K key, V value) {
4: if (containsKey(key)) {
5: get(key).add(value);
6: } else {
7: Set<V> list = new HashSet<V>();
8: list.add(value);
9: put(key, list);
10: }
11: }
12:
13: }
和列表地圖看起來非常除非我做出新的ArrayList中的7號線相同。這種重複是足夠小,可以忍受的,但問題仍然是Java中可能存在的這種「嵌套泛型」?
編輯:
由於erickson said,解決方案是在<A, B extends Something<A>>
,而不是僅僅<B extends Something<A>>
這樣的代碼可以看起來像
public abstract class CollelctionMap<K, V, C extends Collection<V>> extends HashMap<K, C> {
protected abstract C newCollection();
public void add(K key, V value) {
if (containsKey(key)) {
get(key).add(value);
} else {
C c = newCollection();
c.add(value);
put(key, c);
}
}
}
和列表地圖和的setMap只提供正確的收集
是的,我已經提到了,它只是在那裏ilustrate的想法 – Slartibartfast 2008-10-31 18:12:41