Wie deklariere ich eine Karte mit variablen Generika?

8

Ich habe eine Map , deren Schlüssel vom generischen Typ Key<T> sind und die Werte vom Typ List<T> sind. Wenn der Schlüssel eine Instanz von Key<String> ist, muss der Wert ein List<String> sein, und dieselbe Regel gilt für alle anderen Schlüssel / Wert-Paare. Ich habe Folgendes versucht, aber es kompiliert nicht:

%Vor%

Gegenwärtig muss ich es mit "partiellen" Generika deklarieren:

%Vor%

Ich weiß, das ist schlecht, aber ich habe derzeit keine bessere Wahl. Ist es möglich, Generika in dieser Situation zu verwenden?

AKTUALISIEREN

Vielleicht habe ich mein Problem nicht klar ausgedrückt. Ich möchte eine Karte, die in der Lage ist:

%Vor%

Und der folgende Code sollte nicht kompilieren:

%Vor%

Der Schlüssel und der Wert sollten immer den gleichen generischen Typ haben, während der generische Typ beliebig sein kann, und das Erweitern einer Map entspricht meiner Anforderung offensichtlich nicht.

    
Zhao Yi 16.07.2012, 04:25
quelle

2 Antworten

7

Ich kenne keine existierende Bibliothek, die genau das tut, aber es ist nicht schwer, sich selbst zu implementieren. Ich habe in der Vergangenheit schon ein paar Mal etwas Ähnliches gemacht. Sie können nicht die Standard-Map-Schnittstelle verwenden, aber Sie können eine Hash-Karte verwenden, um Ihre Klasse zu implementieren. Zum Anfang könnte es in etwa so aussehen:

%Vor%     
Geoff Reedy 16.07.2012, 05:16
quelle
4

Das ist was du willst:

%Vor%

Wenn Sie keine HashMap als Superklasse möchten, ändern Sie sie in die gewünschte konkrete Klasse.

    
Brad 16.07.2012 04:33
quelle

Tags und Links