У меня есть перечисление SOME_ENUM
:
public enum SOME_ENUM {
EN_ONE,
EN_TWO,
EN_THREE;
}
Будем SOME_ENUM.values()
всегда возвращать перечисления в порядке деклараций перечислений:
EN_ONE, EN_TWO, EN_THREE
? Это правило или не гарантируется, что в следующих выпусках JDK его не изменят?
java
enums
specifications
Скараб
источник
источник
Ответы:
В спецификации языка Java используется этот явный язык:
Так что да, они будут возвращены в порядке декларации. Стоит отметить, что порядок может измениться со временем, если кто-то изменит класс, поэтому будьте очень осторожны с тем, как вы это используете.
источник
Да, мы гарантированно вернем их в таком порядке.
Однако вам не следует полагаться на это и на
ordinal()
значение, поскольку оно может измениться, например, после вставки новых элементов.источник
Это определяется порядком, в котором объявлены ваши значения. Однако нет никакой гарантии, что вы (или кто-то другой) не измените порядок / вставите / удалите значения в будущем . Так что не стоит полагаться на порядок.
Эффективная Java 2nd. Редакция посвящает свой пункт 31 тесно связанной теме: используйте поля экземпляра вместо порядковых номеров :
источник
enum
для какой-то цели, для которой он не предназначен.Другие ответы хороши, но не комментируйте это:
Я не верю, что существуют гарантии на будущие JDK, поэтому вам даже не стоит о них беспокоиться. Невозможно будет обеспечить их соблюдение, будущие лидеры JDK могут просто отказаться от таких гарантий. Это похоже на Вестминстерскую систему парламента: «Ни один парламент не может связывать будущий парламент».
Тем не менее, история JDK показывает превосходную согласованность. Они не вносят много критических изменений, поэтому вы можете быть уверены, что текущее заданное (а не только наблюдаемое) поведение будет сохранено.
источник