enum.values () - ist eine Reihenfolge zurückgegebener enums deterministisch
Habe ich ein enum SOME_ENUM
:
public enum SOME_ENUM {
EN_ONE,
EN_TWO,
EN_THREE;
}
Wird SOME_ENUM.values()
immer wieder die enums in der Reihenfolge der enum-Deklarationen:
EN_ONE, EN_TWO, EN_THREE
? Ist es eine Regel, oder es ist nicht garantiert, werden nicht geändert in der nächsten JDK-Versionen?
InformationsquelleAutor der Frage Skarab | 2010-09-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Java-Sprachspezifikation verwendet diese explizite Sprache:
So, ja, Sie werden wieder in der Reihenfolge der Deklaration. Es ist erwähnenswert, dass die Reihenfolge könnte sich ändern im Laufe der Zeit ändert jemand die Klasse, so sehr vorsichtig sein, wie Sie diesen verwenden.
InformationsquelleAutor der Antwort GaryF
Ja, es ist garantiert, um Sie wieder in Ordnung.
Jedoch Sie sollten vermeiden, sich auf das, und auf der
ordinal()
Wert, da es ändern können, nachdem das einfügen neuer Elemente, zum Beispiel.InformationsquelleAutor der Antwort Bozho
Es ist durch die Reihenfolge bestimmt, Ihre Werte deklariert werden. Allerdings es gibt keine Garantie, dass Sie (oder jemand anderes) wird nicht neu anordnen /einfügen /Werte entfernen in der Zukunft. So sollten Sie nicht verlassen sich auf die Bestellung.
Effektive Java 2. Ausgabe widmet sich die Element 31 zu einem eng verwandten Thema: mit Instanz-Felder anstelle der Ordnungszahlen:
InformationsquelleAutor der Antwort Péter Török
Die anderen Antworten sind gut, aber nicht kommentieren:
Ich glaube nicht, dass Garantien für die Zukunft JDKs vorhanden sind, so sollten Sie sich nicht auch sorgen um Sie. Gäbe es keine Möglichkeit, Sie durchzusetzen, zukünftige JDK Versionen führt, kann nur entscheiden, zu reneg auf solche Garantien. Es ist wie das Westminster-system des Parlaments: "Kein Parlament binden kann ein zukünftiges Parlament."
Sagte, die Geschichte des JDK zeigt ausgezeichnete übereinstimmung. Sie nicht machen eine Menge von änderungen, so können Sie ziemlich sicher sein, dass die aktuellen angegeben (nicht beobachteten) Verhalten beibehalten.
InformationsquelleAutor der Antwort Fletch