Ich habe eine enum mit folgender Struktur:
%Vor% Ich möchte nun switch
verwenden, um zu bestimmen, ob eine Variable name
mit einer bestimmten enum
verknüpft ist:
Das scheint mir völlig legal, aber ich bekomme den Fehler case expressions must be constant expressions
in Eclipse.
Ich kann das mit einer einfachen Menge von if-Anweisungen umgehen, aber ich würde gern den Grund für diesen Fehler wissen und wie die Dinge in den Süden gehen könnten, wenn dies erlaubt wäre.
HINWEIS: Ich kann die Struktur von Friends
Das erscheint mir vollkommen legal
Nun, es ist nicht - ein Methodenaufruf ist nie ein konstanter Ausdruck. Siehe JLS 15.28 für das, was einen konstanten Ausdruck ausmacht. Und ein Case-Wert muss immer ein konstanter Ausdruck sein.
Die einfachste Lösung wäre, eine Friend.fromFullName
statische Methode zu haben, die vielleicht die Friend
up in HashMap<String, Friend>
hat. (Sie haben nicht , um diese Methode in Friend
zu haben ... natürlich wäre das der konventionellste Ort.) Dann könnten Sie den Enum anstelle des Namens wechseln.
Als Nebenbemerkung sollte Ihr Name in der Einzahl stehen und mit ALL_CAPS
members, also Friend.PETER
etc.
Wenn ich Ihre Frage verstanden habe, können Sie valueOf(String)
like
Auch das
%Vor%Sollte
sein %Vor% Weil Person
! = Friends
.
Bearbeiten
Basierend auf Ihrem Kommentar müssen Sie eine statische Methode schreiben, um die richtige Friends
-Instanz zu erhalten,
Dann können Sie es mit
aufrufen %Vor% valueOf(String)
wird mit dem Namen des Felds enum übereinstimmen. Also "Ian", "Sarah" oder "Peter".
Tags und Links java enums switch-statement