enum.values()的顺序总是一样的

时间:2012-08-10 09:30:38

标签: java enums

  

可能重复:
  enum.values() - is an order of returned enums deterministic

我有一个类似下面的枚举: -

enum Direction {

    EAST,
    WEST,
    NORTH,
    SOUTH
}

如果我在Direction enum上说values(),那么值的顺序将始终保持相同。我的意思是值的顺序总是在下面的foramt中:

EAST,WEST,NORTH,SOUTH

或者订单可以在任何时间点发生变化。

4 个答案:

答案 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始终以相同的顺序返回值。