enum.values () - jest kolejnością zwracanych enum deterministycznych

Mam enum SOME_ENUM:

public enum SOME_ENUM {
  EN_ONE,
  EN_TWO,
  EN_THREE;
}

Będzie SOME_ENUM.values() zawsze zwracać enum w kolejności deklaracji enum: EN_ONE, EN_TWO, EN_THREE? Czy jest to reguła, czy nie ma gwarancji, że nie zostanie zmieniona w kolejnych wydaniach JDK?

Author: Andrew Tobilko, 2010-09-29

4 answers

Specyfikacja języka Java używa tego jawnego języka:

@return tablica zawierająca stałe tego typu enum, w kolejności, w jakiej są zadeklarowane [Źródło]

Tak więc, tak, zostaną zwrócone w kolejności deklaracji. Warto zauważyć, że kolejność może się zmieniać z czasem, jeśli ktoś zmieni klasę, więc bądź bardzo ostrożny, jak tego używasz.

 130
Author: GaryF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-06 16:07:59

Tak, to jest gwarantowane, aby zwrócić je w tej kolejności.

Należy jednak unikać polegania na tym i na wartości ordinal(), ponieważ może się ona zmieniać na przykład po wstawieniu nowych elementów.

 14
Author: Bozho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-29 09:07:28

Jest określona przez kolejność deklarowanych wartości. Jednak nie ma gwarancji, że ty (lub ktoś inny) nie zmienisz kolejności / wstawisz / usuniesz wartości w przyszłości. Więc nie powinieneś polegać na rozkazie.

Skuteczna Java 2. Edycja poświęca swoją pozycję 31 ściśle powiązanemu tematowi: Użyj pól instancji zamiast porządków :

Nigdy nie wywołaj wartości skojarzonej z enum z jego porządkowego; przechowuj ją w polu instancji.

 9
Author: Péter Török,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-29 09:12:49

Inne odpowiedzi są dobre, ale nie komentuj tego:

" czy jest to reguła, czy nie ma gwarancji, że nie zostanie zmieniona w następnym Wydania Jdk?"

Nie wierzę, że istnieją gwarancje na przyszłe JDK, więc nie powinieneś się o nie martwić. Nie da się ich wyegzekwować, przyszłe kierownictwo JDK może po prostu zdecydować się na zmianę takich gwarancji. To jest jak Westminsterski system Parlamentu: "żaden Parlament nie może związać przyszłego Parlamentu."

That said, historia JDK ujawnia doskonałą konsekwencję. Nie wprowadzają zbyt wielu przełomowych zmian, więc możesz być całkiem pewien, że obecne określone (nie tylko obserwowane) zachowanie zostanie zachowane.

 7
Author: Fletch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-13 12:05:17