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:
Ich habe dieses Problem mit dem folgenden Code gelöst:
%Vor%Vererbt von dieser Klasse tue ich:
%Vor%Ich bin mir nicht sicher, was Sie tun (eine allgemeine Übersicht in Worten wäre schön), aber:
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. EnumMap
? 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()
.
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:
Was Sie dann wie folgt verwenden können:
%Vor%