Будет порядок для 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, который всегда возвращает значения в том же порядке.