可能重复:
enum.values() - is an order of returned enums deterministic
我有一个类似下面的枚举: -
enum Direction {
EAST,
WEST,
NORTH,
SOUTH
}
如果我在Direction enum上说values()
,那么值的顺序将始终保持相同。我的意思是值的顺序总是在下面的foramt中:
EAST,WEST,NORTH,SOUTH
或者订单可以在任何时间点发生变化。
答案 0 :(得分:22)
每个Enum
类型都有一个静态values
方法,该方法返回一个数组,其中包含枚举类型的所有值,以顺序声明。
此方法通常与for-each循环结合使用,以迭代枚举类型的值。
Java 7规范文档链接: http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9.2
答案 1 :(得分:5)
该方法的行为在Java Language Specification #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();
答案 2 :(得分:1)
正如之前的2个答案所说,顺序是声明的顺序。但是,依靠此顺序(或枚举的顺序)并不是一种好的做法。如果有人重新排序声明或在声明中间添加新元素,则代码的行为可能会意外更改。
如果有固定订单,我会实施Comparable
。
答案 3 :(得分:1)
Enums
用于将变量的值限制为枚举列表中唯一声明的值之一。
这些值为public static final
,即(特定枚举类型的常量对象),其顺序对于将变量映射到这些对象非常重要。
values()
是static method of Enum
,始终以相同的顺序返回值。