Ich habe eine Map
, deren Schlüssel vom generischen Typ sind Key<T>
, und Werte sind vom Typ List<T>
. Wenn der Schlüssel eine Instanz von Key<String>
ist, muss der Wert List<String>
lauten, und die gleiche Regel gilt für alle anderen Schlüssel/Wert-Paare. Ich habe folgendes versucht, aber es lässt sich nicht kompilieren:Wie deklariert man eine Karte mit variablen Generika?
Map<T, List<T>> map;
Derzeit habe ich es zu erklären, mit „teilweise“ Generika:
Map<Object, List> map;
Ich weiß, das ist schlecht, aber ich habe noch keine bessere Wahl . Ist es möglich, Generika in dieser Situation zu verwenden?
UPDATE
Vielleicht habe ich mein Problem nicht deutlich zum Ausdruck bringen. Ich möchte eine Karte, die in der Lage ist:
map.put(new Key<String>(), new ArrayList<String>());
map.put(new Key<Integer>(), new ArrayList<Integer>());
Und der folgende Code nicht kompilieren:
map.put(new Key<String>(), new ArrayList<Integer>());
Der Schlüssel und der Wert sollte immer die gleiche generische Typ, während der generische Typ beliebig sein kann, und offensichtlich erweitert eine Karte meine Anforderung nicht.
Raum sollte nicht das Problem sein. Es ist wahrscheinlich so, wie es benutzt wird. OP muss mehr Code zum Reparieren zeigen. – Nishant
Verwenden Sie Schlüssel vom Typ "T" oder Schlüssel vom Typ "Schlüssel"? –
Mit Ihrem tatsächlichen Szenario sollten Sie Kapselung verwenden, um Ihr Problem zu lösen, wie Nishant und Geoff in ihren Antworten angeben, passen Sie es einfach an Ihren tatsächlichen Code an. –