126 votes

Comment obtenir toutes les valeurs énumérées en Java ?

Je suis tombé sur ce problème où, sans connaître le type d'enum réel dont j'ai besoin, je dois itérer sur ses valeurs possibles.

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

Des idées sur comment extraire les valeurs possibles de enumValue ?

181voto

ColinD Points 48573

Appelez [Class#getEnumConstants](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html#getEnumConstants()) pour obtenir les éléments de l'énumération (ou obtenir null s'il ne s'agit pas d'une classe d'énumération).

Object[] valeursPossibles = enumValue.getDeclaringClass().getEnumConstants();

1 votes

Pourquoi utilisez-vous getDeclaringClass()?

8 votes

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

0 votes

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

126voto

calmdownjakes Points 99
LesEnumClass[] vosEnums = LesEnumClass.class.getEnumConstants();

Ou

LesEnumClass[] vosEnums = LesEnumClass.values();

16voto

RodeoClown Points 3949

Les Enums sont tout comme les Classes en ce sens qu'ils sont typés. Votre code actuel vérifie simplement s'il s'agit d'un Enum sans spécifier de quel type d'Enum il fait partie.

Parce que vous n'avez pas spécifié le type de l'enum, vous devrez utiliser la réflexion pour savoir quelle est la liste des valeurs de l'enum.

Vous pouvez le faire comme suit:

enumValue.getDeclaringClass().getEnumConstants() 

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

15voto

Rajesh Dixit Points 181

Méthode des valeurs de l'énumération

La méthode enum.values() qui renvoie toutes les instances de l'énumération.

  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();

        // nom de l'énumération en utilisant la méthode name
        // Conversion de l'énumération en chaîne de caractères en utilisant la méthode toString()
        for (Currency currency : currencies) {
              System.out.printf("[ Devise : %s,
                         Valeur : %s ]%n",currency.name(),currency);
        }
  }
}

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

9voto

deleted Points 67

... ou MyEnum.values() ? Ou est-ce que j'ai manqué quelque chose?

3 votes

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X