Java enumiert im generischen Typ

8

Ich möchte einen generischen enumbasierten Mapper für IBatis erstellen. Ich mache das mit dem untenstehenden Code. Dies hat Kompilierzeitfehler, die ich nicht zu beheben weiß. Vielleicht ist meine Lösung einfach falsch (denken Sie daran, die Verwendung von IBatis), in diesem Fall schlagen Sie bitte etwas besser vor.

Jede Hilfe wird geschätzt.

Was ich erreichen möchte, ist, nachfolgende Mapper wie folgt zu definieren:

%Vor%

Der aktuelle Code:

%Vor%

Ich habe dem obigen Code Fehlermarkierungen hinzugefügt, die Fehlermeldungen sind in folgender Reihenfolge:

  • T kann nicht aufgelöst werden
  • Die Methode value () ist nicht definiert für der Typ T
  • Die Methode values ​​() ist nicht definiert für der Typ T
  • Die Methode values ​​() ist nicht definiert für der Typ T

Ich habe dieses Problem mit dem folgenden Code gelöst:

%Vor%

Vererbt von dieser Klasse tue ich:

%Vor%     
Marcin Cylke 15.06.2010, 11:47
quelle

2 Antworten

8

Ich bin mir nicht sicher, was Sie tun (eine allgemeine Übersicht in Worten wäre schön), aber:

  • Sie können isAssignableFrom(T) nicht verwenden (Sie benötigen ein Class -Objekt), und Sie können auch instanceof T nicht ausführen (Generika sind nicht-verdinglicht). Sie können stattdessen Class<T> -Typ-Token übergeben.
  • Haben Sie sich EnumMap ?

Siehe auch

Es ist immer noch nicht klar, was gewünscht wird, aber vielleicht ist es etwas in der Art:

%Vor%

Also verwenden wir Enum.valueOf , das den Typ Token Class<T extends Enum<T>> akzeptiert, und nach der Konstante enum mit einem gegebenen Namen fragt. valueOf ist NOT ohne Berücksichtigung der Groß- / Kleinschreibung, aber nach Konventionen sollten alle -Konstanten in Großbuchstaben geschrieben sein. Daher nehmen wir einfach die Abfragezeichenfolge und stellen sie .toUpperCase() .

    
polygenelubricants 15.06.2010, 11:54
quelle
4

Wie von Polygenelubricants angegeben, müssen Sie konkrete Laufzeittypen übergeben, z. Class<?> anstelle von syntaktischen Compiletimetypen wie generische Parameter. Hier ist eine Neuschreibung, wie Sie es verwenden könnten:

%Vor%

Was Sie dann wie folgt verwenden können:

%Vor%     
BalusC 15.06.2010 12:22
quelle

Tags und Links