2010-02-16 9 views
68

Je suis tombé sur ce problème que je ne connais pas le type réel enum je dois itérer ses valeurs possibles.Comment obtenir toutes les valeurs enum dans Java?

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

Des idées pour extraire d'enumValue ses valeurs possibles?

Répondre

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

Pourquoi utilisez-vous le getDeclaringClass()? –

+3

@PeterKriens: Parce que 'getClass()' sur un objet 'enum' peut renvoyer un sous-type _ du type' enum' lui-même (si, disons, la constante 'enum' remplace une méthode du type' enum'). 'getDeclaringClass()' retourne le type 'enum' qui a déclaré cette constante, ce qui est ce que vous voulez ici. – ColinD

+0

Merci! Je n'avais pas réalisé ce cas mais vous avez raison, la constante peut être d'une classe interne anonyme. –

13

Enum s ne sont que lyke Class es en ce qu'ils sont typés. Votre code actuel vérifie simplement s'il s'agit d'un Enum sans spécifier le type d'Enum dont il fait partie. Comme vous n'avez pas spécifié le type de l'énumération, vous devrez utiliser la réflexion pour connaître la liste des valeurs d'énumération.

Vous pouvez le faire comme ceci:

enumValue.getDeclaringClass().getEnumConstants() 

Ceci renvoie un tableau d'objets Enum, chacun étant l'une des options disponibles.

2

... ou MyEnum.values ​​()? Ou est-ce que je manque quelque chose? méthode qui renvoie toutes les instances de ENUM

+0

Oui, la classe réelle de l'énumération n'est pas disponible ici pour faire appel à une méthode statique, juste une instance d'un sous-type d'Enum. – ColinD

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

Ou

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

'YourEnumClass [] yourEnums = YourEnumClass.class.getEnumConstants();' a résolu mon problème d'appel à partir d'une méthode non statique. – Jeremy

5

valeurs méthode de ENUM

enum.values ​​().

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

Questions connexes