Java enum - Kann nicht auf ein Feld verweisen, bevor es definiert wurde

7

Ich habe ein enum wie das folgende, aber Eclipse sagt, dass es in der ersten Definition jedes entgegengesetzten Paares Fehler gibt.

%Vor%

Was ich erreichen möchte, ist Baz.something.opposite zu verwenden, um das gegenüberliegende Objekt von Baz.something zu erhalten. Gibt es eine mögliche Problemumgehung dafür? Vielleicht ist in diesem Beispiel ein leerer Platzhalter für yang und bad vor yin und good definiert?

    
Zaq 25.09.2012, 22:58
quelle

8 Antworten

9

Sie könnten etwas wie:

versuchen %Vor%

und referenzieren Sie es dann als

%Vor%

Das sollte erreichen, was Sie tun möchten, indem Sie den Enum-Wert anhand seiner String-Darstellung nachschlagen. Ich denke nicht, dass Sie es mit dem rekursiven Verweis auf Baz arbeiten können.

    
jcern 25.09.2012, 23:05
quelle
10

Mit der switch-Anweisung:

%Vor%

Oder verzögerte Initialisierung:

%Vor%

Vielleicht möchten Sie das veränderbare Feld privat machen und einen Getter bereitstellen.

    
meriton 25.09.2012 23:20
quelle
1

Wie wäre es mit einer EnumMap?

%Vor%     
OldCurmudgeon 25.09.2012 23:26
quelle
1

Jahre später, die kürzeste und hacky Lösung

%Vor%

Es beruht auf der Annahme, dass jedes Mitglied ein Gegenteil hat und dass sie paarweise angeordnet sind. Es ersetzt das Feld durch eine Methode in der Hoffnung, dass die JVM den gesamten Overhead optimieren wird. Dies ist auf dem Desktop sinnvoll, auf Android weniger sinnvoll.

Um den Overhead zu eliminieren, könnte ich hier den statischen Initialisierer verwenden wie viele andere Lösungen.

    
maaartinus 20.05.2014 08:47
quelle
1

Sie können auch abstrakte Methoden verwenden, um zu verzögern, was Vorteile der Typsicherheit gegenüber der akzeptierten Antwort hat.

%Vor%

Und Testcode, weil ich es brauchte ....

%Vor%     
Pool 22.03.2015 20:01
quelle
0

Und noch eine weitere mögliche Implementierung (ähnlich wie bei einigen anderen Lösungen, aber mit einer HashMap).

%Vor%     
GreyBeardedGeek 25.09.2012 23:25
quelle
0

Eine weitere Alternative :) mit einer Karte. Es ist ziemlich ausführlich, aber auf diese Weise können Sie jedes Paar nur einmal definieren , die andere Richtung wird abgeleitet.

%Vor%

Persönlich mag ich meriton 's zweites Beispiel am besten.

    
Natix 25.09.2012 23:28
quelle
0

Und dann gibt es die total OTT Lösung.

%Vor%     
OldCurmudgeon 25.09.2012 23:47
quelle

Tags und Links