Wie kann ein Wert in Java von einer Enumeration in eine andere umgewandelt werden?

9

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!

    
Android-Droid 02.09.2011, 13:54
quelle

11 Antworten

17

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:

%Vor%     
Michał Šrajer 02.09.2011, 14:49
quelle
7

Es ist nicht möglich. Enum1 und Enum2 sind verschiedene Typen mit nichts gemeinsam.

    
Heisenbug 02.09.2011 13:56
quelle
5

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).

    
Carlos Heuberger 02.09.2011 14:29
quelle
3

Das geht nicht, weil sie Objekte verschiedener Klassen sind.

Sie könnten konvertieren basierend auf Ordnungszahl oder Namen von einem zum anderen, aber ich würde den Entwurf jedes Programms in Frage stellen, das dazu benötigt wird.

    
parsifal 02.09.2011 13:56
quelle
3

Sie können nicht; Sie können jedoch in Ihren Enums eine statische Methode mit einem Übersetzungscode erstellen. Aber Sie müssen eine klare Vorstellung von den Regeln haben, die Sie implementieren möchten.

    
Raveline 02.09.2011 13:57
quelle
3

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:)

    
codewing 30.09.2014 14:37
quelle
3

Die Antwort auf diese Frage kann davon abhängen, was das "Casting" erwartet:

Casting nach Ordinalposition

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:

%Vor%

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):

%Vor%

Wenn die Google Guava-Bibliothek nicht vorhanden ist, kann sie manuell in einigen weiteren Codezeilen ausgeführt werden:

%Vor%

Beispielverwendung:

%Vor%

Casting nach freigegebenen enum Wertnamen

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:

%Vor%

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%     
Steve Chambers 10.11.2016 16:36
quelle
2

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.

    
alfa 02.09.2011 13:58
quelle
0

Es wird Ihnen wahrscheinlich nicht helfen, aber Sie können

haben %Vor%

Wir haben nicht genug Informationen darüber, was Sie versuchen, um Ihnen zu helfen. Es macht keinen Sinn, ein Enum zu einem anderen Enum zu werfen.

    
toto2 02.09.2011 14:10
quelle
0

Sie können nicht von einem Enum auf ein anderes umwandeln, jedoch hat jedes Enum eine garantierte Reihenfolge und Sie können ein Enum einfach in ein anderes übersetzen.

    
T.Harini 02.01.2017 06:23
quelle
-1

Sie können dies auf einfache Weise tun:

%Vor%     
Navnath 10.11.2016 12:58
quelle

Tags und Links