Das ist eine einfache Grundfrage
Eine enum haben
%Vor%Kann ich die Bestellnummer für Beispiel ID = 0, GROUP = 2, DATA = 3, FAIL = 4?
erhaltenDies ist ein Weg dazu, aber ein seltsamer und langer! = S
%Vor%um Zahlen zu bekommen, schreibe ich TK.ID.get (), TK.GROUP.get (), etc ... Ich mag das nicht
gibt es einen besseren Weg?
(C enums, C Makros .. Ich vermisse dich beide)
Danke
Die ordinal()
macht was du machen willst. Dies ist ein Auszug aus der Dokumentation:
Gibt die Ordnungszahl dieser Enumerationskonstante zurück (ihre Position in der Deklaration
enum
, wobei der Anfangskonstante eine Ordinalzahl von Null zugewiesen wird). Die meisten Programmierer werden für diese Methode keine Verwendung haben. Sie ist für die Verwendung in komplexen enumbasierten Datenstrukturen vorgesehen, wie zBEnumSet
undEnumMap
.
Josh Bloch in Effektive Java 2nd Edition geht weiter, um zu erklären, warum die Verwendung von ordinal()
eine schreckliche Idee ist. Hier sind einige Zitate, leicht bearbeitet:
Leiten Sie niemals einen Wert, der einer Aufzählung zugeordnet ist, von seiner Ordnungszahl ab; Speichern Sie es stattdessen in einem Instanzfeld. ( Punkt 31: Verwenden von Instanzfeldern anstelle von Ordinalzahlen ) Es ist selten sinnvoll, Ordnungszahlen zum Indexieren von Arrays zu verwenden: Verwenden Sie stattdessen
EnumMap
. Das allgemeine Prinzip ist, dass Anwendungsprogrammierer selten, wenn überhaupt,Enum.ordinal
verwenden sollten. ( Punkt 33: Verwenden SieEnumMap
anstelle der Ordinalindizierung )
Ihr "seltsamer und langer" Weg ist genau das Rezept von Punkt 31.
Glücklicherweise ist Java nicht C. Ein Java enum
ist sehr mächtig und flexibel, wird von vielen Bibliotheksklassen unterstützt und Sie sollten lernen, sie zu akzeptieren, anstatt ordinal()
zu verwenden.
Sehen Sie sich zum Beispiel EnumMap
an.
Eine spezielle Implementierung
Map
zur Verwendung mitenum
Typ Schlüssel. Alle Schlüssel in einerenum
-Karte müssen aus einem einzigenenum
-Typ stammen, der explizit oder implizit beim Erstellen der Map angegeben wird. Enum Maps werden intern als Arrays dargestellt. Diese Darstellung ist äußerst kompakt und effizient.
Das heißt, anstelle der folgenden (was Sie vielleicht tun wollten):
%Vor%Sie können stattdessen tun:
%Vor% Das Buch deckt auch eine andere "traditionelle" (ab) Verwendung von enum
in C ab, d. h. Bitfelder (Zuweisen von Potenzen von 2 zu jeder Konstante usw.). Nun, dafür hat Java stattdessen EnumSet
.
öffentliches final int ordinal ()
Gibt die Ordinalzahl dieser Enumerationskonstante zurück (ihre Position in der Enum-Deklaration, wobei der Anfangskonstanten eine Ordinalzahl von Null zugewiesen wird). Die meisten Programmierer werden für diese Methode keine Verwendung haben. Es ist für den Einsatz von anspruchsvollen Enum-basierten Datenstrukturen wie EnumSet und EnumMap ausgelegt.