Java Enum Auto-Inkrement Einträge?

7

Erlaubt Java etwas so gutes wie C oder sogar C # in dem Sinne, dass Sie eine Aufzählung mit Feldern definieren können, die automatisch an Wert zunehmen und bei einem gegebenen Wert beginnen?

z. B.

In C oder C #:

%Vor%

ergibt A = 10, B = 11, C = 12, D = 5000, E = 5001, Fisch = 5002.

    
Alex Budovski 13.01.2010, 08:48
quelle

2 Antworten

10

In Java können Sie die Ordinalwerte nicht explizit angeben . Sie autoinkrementieren immer von 0, ohne Kontrolle darüber.

Wenn Sie andere benutzerdefinierte Werte wünschen, müssen Sie sie in Konstruktoraufrufe einfügen und sie selbst speichern. Sie können automatisch inkrementieren, aber es ist eklig wie:

%Vor%

Beachten Sie die Notwendigkeit für die geschachtelte Klasse, da Sie nicht auf statische Felder innerhalb eines Aufzählungskonstruktors zugreifen können. Ick, ick, ick. Bitte tu das nicht.

    
Jon Skeet 13.01.2010, 08:50
quelle
10

Dies ist eine Entwurfsauswahl von Java-Enums, die die Änderung der Ordinalwerte nicht unterstützt. Grundsätzlich sind sie nicht stabil genug, um von ihnen abhängig zu sein. Wenn Sie die Position von B und C in Ihrem Beispiel ändern, werden die Clients abhängig von den Ordinalwerten gebrochen. Dies kann unbeabsichtigt passieren.

Das Problem wird unter Effektives Java Punkt 31: Benutze Instanzfeld statt Ordnungszahlen .

Sie können das Verhalten stabil emulieren:

%Vor%

Mit dieser Definition können Sie die Reihenfolge der Werte ändern, ohne die Clients zu unterbrechen.

Aufruf von for(X x : X.values()) System.out.println(x); gibt zurück:

%Vor%     
Thomas Jung 13.01.2010 08:55
quelle

Tags und Links