Umschaltewert von enum: case-Ausdrücke müssen konstante Ausdrücke sein

8

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:

%Vor%

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

nicht ändern     
Ian2thedv 07.08.2014, 13:23
quelle

2 Antworten

10
  

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.

    
Jon Skeet 07.08.2014, 13:27
quelle
13

Wenn ich Ihre Frage verstanden habe, können Sie valueOf(String) like

verwenden %Vor%

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,

%Vor%

Dann können Sie es mit

aufrufen %Vor%

valueOf(String) wird mit dem Namen des Felds enum übereinstimmen. Also "Ian", "Sarah" oder "Peter".

    
Elliott Frisch 07.08.2014 13:30
quelle

Tags und Links