Wie kann ich einen Wert von Enum1 nach Enum 2 in Java umwandeln? Hier ist ein Beispiel von dem, was ich versuche zu tun:
%Vor%Ich möchte also so etwas machen:
%Vor%Ist es möglich und wie kann ich das tun?
Vielen Dank im Voraus!
Sie können nicht von einem Enum zum anderen casten, jedoch hat jedes Enum eine garantierte Reihenfolge, und Sie können ein Enum leicht in ein anderes umwandeln (um die Reihenfolge zu erhalten). Zum Beispiel:
%Vor% wir können E1.TWO
nach / from E2.BETA
umwandeln:
Sie können eine Methode in Enum1 definieren, um die entsprechende Enum2 zurückzugeben:
%Vor%oder etwas besser lesbar (IMO):
%Vor% BEARBEITEN:
Wenn Sie die entkoppelten 2 Enums beibehalten müssen, erstellen Sie eine Zuordnung mit dem Mapping von Enum1 zu Enum2 (in einer 3. Dienstprogrammklasse).
Obwohl dieses Ticket schon vor einiger Zeit aktiv war, füge ich eine weitere Möglichkeit hinzu:
Sie könnten auch eine Karte erstellen, z. so:
%Vor%Verwendung
%Vor%(+) Sie müssen nicht die Reihenfolge Ihrer Elemente überprüfen
(+) leicht zu lesen
(+) schnell
(-) benötigt Leerzeichen
Korrigiere mich, wenn ich falsch liege:)
Die Antwort auf diese Frage kann davon abhängen, was das "Casting" erwartet:
Im angegebenen Beispiel gibt es keine Gemeinsamkeiten zwischen den Mengen von Werten in den beiden Enums. Ich gehe also davon aus, dass die Absicht darin bestand, nach der Ordinalposition zu übersetzen, so dass Enum1.ONE
= & gt; Enum2.FOUR
, Enum1.TWO
= & gt; Enum2.FIVE
und Enum1.THREE
= & gt; %Code%. Dies kann folgendermaßen geschehen:
Die nächste natürliche Frage ist, wie dies auf eine generische Funktion erweitert werden könnte, die dasselbe für zwei Enum2.SIX
-Typen tun würde. Nicht für schwache Nerven, aber die folgenden werden die Aufgabe erledigen (es erfordert Guava):
Wenn die Google Guava-Bibliothek nicht vorhanden ist, kann sie manuell in einigen weiteren Codezeilen ausgeführt werden:
%Vor%Beispielverwendung:
%Vor%Es gibt noch eine andere Möglichkeit, zwischen Aufzählungen zu wechseln, die einige der gleichen Wertnamen haben:
Beispiel:
%Vor% Dieses Casting funktioniert nur für die gemeinsamen Werte (d. h. enum
und UNKNOWN
oben) und kann wie folgt durchgeführt werden:
Dies wird eine IllegalArgumentException auslösen, wenn der Wertname in der Zielaufzählung nicht vorhanden ist. Diesmal kann die generische Methode etwas einfacher sein:
%Vor%Beispielverwendung:
%Vor%Eine Umwandlungsoperation ist nicht möglich, Sie können jedoch eine statische Elementfunktion für enum1 schreiben, die enum2 in enum1 umwandelt:
%Vor%Übrigens können Sie jeder Konstante beider Enums eine ID zuweisen, was die Implementierung vereinfacht.
Hier ist ein Tutorial zu Enums.
Tags und Links java enumeration enums casting