2017-10-11 23 views
0

Ich brauche enums mit Dota Notation wie diese WEATHER.SUNNY, da sie Themen mit Platzhalter darstellen. Ich weiß, dass dies nicht möglich ist, da Enums gültige Bezeichner sein müssen.Java - Erstellen von Enums mit Punktnotation

here jemand schlägt vor, die toString mehtod zu überschreiben, aber ich verstehe nicht wirklich, wie das gemeint ist. Ist dies jedoch immer noch möglich?

Antwort

2

Sie können auf jeden Fall tun, was @Stefan schlägt vor, aber dies könnte ein guter Anwendungsfall sein für ein Feld Befestigung an Ihre enum-Werte:

public enum Topic { 
    SUNNY("WEATHER.SUNNY"), CLOUDY("WEATHER.CLOUD"), ... 

    String notation; 

    Topic(String notation) { 
     this.notation = notation; 
    } 

    public String getNotation() { return notation; } 
} 

Und dann können Sie Topic.SUNNY.getNotation() aufrufen.

+0

Vielen Dank für diese seine adaequat appraoch. Ich bin mir jedoch nicht sicher, wie ich das auf komplexere Strukturen anwenden soll. Stellen Sie sich etwas wie: WEATHER.SUMMER.SUNNY.DRYHUMIDITY –

+0

Gibt es dort eine implizite Hierarchie? Wird jedes Objekt 1 von jeder dieser Kategorie haben? Sollten sie verschiedene Enums als Felder einer Topic-Klasse sein? Könnten Sie ein Set speichern? Sorta hängt davon ab, wofür du hingehst? – EvanM

+0

Entschuldigung, ich war nicht auffällig. Der Punkt impliziert eine hierarchische Ordnung und führt zu einer Baumstruktur. Dies mit Strings zu tun war offensichtlich kein Problem, aber wieder mit Enums, ich weiß nicht wirklich, wie man eine komplexere Struktur erreicht. –

0

Beispielcode, der die Idee des überwiegenden toString zeigt:

public class Test { 

enum Weather { Sunny, Cloudy; 

    @Override 
    public String toString() { 
     return "WEATHER." + super.toString().toUpperCase(); 
    } 

}; 

public static void main(String[] args) { 
    System.out.println(Weather.Sunny); 
} 
} 

Ausgang: WEATHER.SUNNY

0

Es gibt kein Problem mit der Definition von Enum, die einen Großbuchstaben Namen hat. Es wäre nicht konsistent mit Java-Namenskonventionen, aber es funktioniert.

enum WEATHER { 
    SUNNY, CLOUDY; 
} 

Dann würden Sie wie folgt verwenden:

WEATHER weather = WEATHER.SUNNY