Zuvor hatte ich meine LegNo-Aufzählungen einfach wie folgt definiert:
NO_LEG, LEG_ONE, LEG_TWO
und durch einen Anruf return LegNo.values()[i];
konnte ich den Wert erhalten, der jeder Aufzählung zugeordnet ist.
Aber jetzt habe ich beschlossen, dass die LegNo
Aufzählung NO_LEG
int -1 statt 0 sein soll, also habe ich beschlossen, einen privaten Konstruktor zu verwenden, um seinen int-Wert zu initialisieren und festzulegen
NO_LEG(-1), LEG_ONE(1), LEG_TWO(2);
private LegNo(final int leg) { legNo = leg; }
Das einzige, was jetzt ist, ist, dass die values()
Methode für die NO_LEG
Aufzählung nicht funktioniert , weil ich es so mache . Wie erhalte ich die mit dem int verknüpfte Aufzählung? Gibt es eine effiziente Möglichkeit, dies zu tun, außer eine case switch-Anweisung oder ein if-elseif-elseif zu verwenden?
Ich kann viele SO-Fragen sehen, die damit zu tun haben, den int-Wert aus der Aufzählung zu erhalten, aber ich bin hinter dem Gegenteil her.
LegNo foo = LegNo.valueOf(2);
. Der vorherige Code gibt a zurückLegNo.LEG_TWO
.null
wie erwartet mithilfe von HashMap.get zurückgegeben wird : Gibt den Wert zurück, dem der angegebene Schlüssel zugeordnet ist, oder null, wenn diese Zuordnung keine Zuordnung für den Schlüssel enthält.valueOf()
eine 1000-Mitglieder-Enumeration in einer anderen Schleife verwenden.Sie können auch eine statische Methode in die Aufzählung aufnehmen, die alle Elemente durchläuft und die richtige zurückgibt.
Wenn Sie nun einen Enum-Wert durch die Ganzzahl erhalten möchten, verwenden Sie einfach:
quelle
adarshrs Antwort an Java 8 angepasst:
quelle
Sie können auch auf den Enum-Wert zugreifen, der dem angegebenen Integer-Wert entspricht, indem Sie einfach die Methode values () in enum LegNo aufrufen. Es gibt ein Feld mit LegNo-Aufzählungen zurück:
LegNo.values()[0]; //returns LEG_NO LegNo.values()[1]; //returns LEG_ONE LegNo.values()[2]; //returns LEG_TWO
Nicht genau das, wonach er suchte, aber ziemlich nah und in der Tat sehr einfach. (Obwohl das Thema tot ist, kann es für jemand anderen nützlich sein.)
quelle
Java 8 Weg mit Standardwert:
anrufen:
oder mit Ausnahme:
quelle
Da Ihre Aufzählung nur 3 Elemente enthält, besteht der schnellste Weg darin, nur eine Reihe von Elementen zu verwenden
if else
, wie Sie vorgeschlagen haben.edit: Die Antwort, die adarshr gegeben hat, ist besser für allgemeine Fälle geeignet, in denen es viele Enum-Werte gibt, aber ich denke, es ist ein Overkill für Ihr Problem.
quelle
Map
in Ihrem Code zu haben ist sicherlich kein Overkill. Außerdem macht es die Methode viel sauberer als ein Spaghetti von Wenn-Sonst-Bedingungen.public LegNo valueOf(int value)
nicht geändert werden. Das if-else könnte dann innerhalb der Aufzählung selbst geschrieben werden. Wenn das if-else aus der Aufzählung herauskommt, wird es sicherlich ein nicht so sauberer Code.quelle
quelle