Будет порядок для enum.values () всегда одинаковым
Возможный дубликат:
enum.values () - это порядок возвращаемых перечислений, детерминированный
У меня есть перечисление что-то вроде ниже: -
enum Direction {
EAST,
WEST,
NORTH,
SOUTH
}
Если я скажу values()
в перечислении направления, тогда порядок значения останется таким же все время. Я имею в виду, что порядок значений будет всегда в foramt ниже:
EAST,WEST,NORTH,SOUTH
или может изменить порядок в любой момент времени.
Ответы
Ответ 1
Каждый тип Enum
имеет статический метод values
, который возвращает массив, содержащий все значения типа перечисления в порядке, объявленном.
Этот метод обычно используется в сочетании с циклом for-each для итерации по значениям перечисляемого типа.
Ссылка на документацию по Java 7 Spec:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9.2
Ответ 2
Поведение этого метода определено в Спецификация языка Java # 8.9.2:
Кроме того, если E является именем типа перечисления, то этот тип имеет следующие неявно объявленные статические методы:
/**
* Returns an array containing the constants of this enum
* type, in the order they're declared. This method may be
* used to iterate over the constants as follows:
*
* for(E c : E.values())
* System.out.println(c);
*
* @return an array containing the constants of this enum
* type, in the order they're declared
*/
public static E[] values();
Ответ 3
Как утверждают предыдущие 2 ответа, порядок - это порядок декларации. Однако не следует полагаться на этот порядок (или на порядковый номер перечисления). Если кто-то переупорядочивает декларацию или добавляет новый элемент в середине объявления, поведение кода может неожиданно измениться.
Если есть фиксированный порядок, я бы выполнил Comparable
.
Ответ 4
Enums
используются для ограничения значений переменных одним из только объявленных значений в перечисляемом списке.
Эти значения public static final
, т.е. (константные объекты этого конкретного типа Enum) и его порядок очень важен для сопоставления переменных этим объектам.
values()
- это static method of Enum
, который всегда возвращает значения в том же порядке.