Je voulais faire Carte des collections en Java, donc je peux faire quelque chose commeCarte des collections
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);
}
}
J'ai essayé de le faire avec quelque chose comme
public class CollectionMap<K, C extends Collection<V>> extends HashMap<K, C>
mais compilateur se plaint la partie <V>
, et il y aurait encore un problème de faire une nouvelle collection appropriée.
En ce moment, je l'ai fait deux classes: setMap qui ressemblent à ceci
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: }
et ListeCarte regarde à peu près le même, sauf la ligne 7, où je fais nouvelle ArrayList. Ce genre de duplication est assez petit pour être tolérable, mais la question reste de savoir si ce genre de "génériques imbriqués" est possible en Java?
EDIT:
Comme erickson said, solution est <A, B extends Something<A>>
plutôt que <B extends Something<A>>
si le code peut ressembler à quelque chose comme
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);
}
}
}
et ListeCarte et setMap fournir la seule collection appropriée
oui, je l'ai mentionné que, il est juste là une idée à illustrer – Slartibartfast