2012-08-10 8 views
10

Duplicar posibles:
enum.values() - is an order of returned enums deterministicserá el fin de que enum.values ​​() siempre misma

tengo una enumeración algo parecido a continuación: -

enum Direction { 

    EAST, 
    WEST, 
    NORTH, 
    SOUTH 
} 

Si i diga values() en Direction enum, luego el orden del valor permanecerá igual todo el tiempo. Es decir será el orden de valores estará en el foramt a continuación siempre:

EAST,WEST,NORTH,SOUTH 

o ¿Puede cambiar el orden en cualquier punto del tiempo.

Respuesta

14

Cada Enum tipo tiene un método estático values que devuelve una matriz que contiene todos los valores del tipo de enum en el orden en que se declaran .

Este método se usa comúnmente en combinación con el ciclo for-each para iterar sobre los valores de un tipo enumerado.

Java 7 Spec enlace de documentación: http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9.2

+3

+1 Sugiero usar las referencias de Java 7 si puede, ya que Java 5.0 es EOL. –

+0

@PeterLawrey hecho. –

+2

Para el votante de abajo, si pudiera dejar una sugerencia para mejorar la respuesta, con mucho gusto lo haré. –

2

El comportamiento de este método se define en el Java Language Specification #8.9.2:

Además, si E es el nombre de un tipo de enumeración, entonces ese tipo tiene los siguientes métodos estáticos implícitamente declaradas:

/** 
* 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(); 
1

Como la respuesta anterior 2 s decir, la orden es el orden de la declaración. Sin embargo, no es una buena práctica confiar en esta orden (o en el ordinal de la enumeración). Si alguien reordena la declaración o agrega un nuevo elemento en el medio de la declaración, el comportamiento del código puede cambiar inesperadamente. Si hay un pedido fijo, implementaría Comparable.

1

Enums se usan para restringir los valores de las variables a uno de los únicos valores declarados en la lista enumerada.

Estos valores son public static final, es decir, (objetos constantes de ese tipo Enum específico), y su orden es muy importante para mapear las variables a estos objetos.

values() es static method of Enum, que siempre devuelve los valores en el mismo orden.

Cuestiones relacionadas