2010-02-16 49 views
68

Me encontré con este problema que sin conocer el tipo real enum necesito repetir sus posibles valores.¿Cómo obtener todos los valores enum en Java?

if (value instanceof Enum){ 
    Enum enumValue = (Enum)value; 
} 

¿Alguna idea de cómo extraer de enumValue sus posibles valores?

Respuesta

113
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants(); 
+0

¿Por qué utiliza el getDeclaringClass()? –

+3

@PeterKriens: Porque 'getClass()' en un objeto 'enum' puede devolver un _subtype_ del tipo' enum' en sí mismo (si, por ejemplo, la constante 'enum' anula un método del tipo' enum'). 'getDeclaringClass()' devuelve el tipo 'enum' que declaró esa constante, que es lo que quiere aquí. – ColinD

+0

¡Gracias! No me había dado cuenta de ese caso pero tienes razón, la constante puede ser una clase interna anónima. –

13

Enum s son sólo lyke Class ES en que se escriben. Su código actual simplemente verifica si es un Enum sin especificar de qué tipo de Enum forma parte.

Como no ha especificado el tipo de la enumeración, tendrá que usar la reflexión para averiguar cuál es la lista de valores enum.

Puede hacerlo de esta manera:

enumValue.getDeclaringClass().getEnumConstants() 

Esto devolverá un array de objetos de enumeración, con cada ser una de las opciones disponibles.

2

... o MyEnum.values ​​()? ¿O me estoy perdiendo algo?

+0

Sí, la clase real de la enumeración no está disponible aquí para hacer una llamada a un método estático, solo una instancia de algún subtipo de Enum. – ColinD

58
YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants(); 

O

YourEnumClass[] yourEnums = YourEnumClass.values(); 
+0

'YourEnumClass [] yourEnums = YourEnumClass.class.getEnumConstants();' resolvió mi problema de llamar desde un método no estático. – Jeremy

5

valores método de enum

método

enum.values ​​() que devuelve todas las instancias de enumeración.

public class EnumTest { 
     private enum Currency { 
     PENNY("1 rs"), NICKLE("5 rs"), DIME("10 rs"), QUARTER("25 rs"); 
     private String value; 
     private Currency(String brand) { 
       this.value = brand; 
     } 

     @Override 
     public String toString() { 
       return value; 
     } 
    } 

    public static void main(String args[]) { 

     Currency[] currencies = Currency.values(); 

     // enum name using name method 
     // enum to String using toString() method 
     for (Currency currency : currencies) { 
       System.out.printf("[ Currency : %s, 
         Value : %s ]%n",currency.name(),currency); 
     } 
    } 
} 

http://javaexplorer03.blogspot.in/2015/10/name-and-values-method-of-enum.html

Cuestiones relacionadas