201 votes

les valeurs de() la méthode de l'Enum

Je déclarer une énumération que :

     enum Sex {MALE,FEMALE};

Puis-je effectuer une itération enum comme indiqué ci-dessous :

    for(Sex v : Sex.values()){
        System.out.println(" values :"+ v);
    }

J'ai vérifié API Java, mais ne peut pas trouver les valeurs de() la méthode ? Curieux de savoir d'où vient cette méthode vient? API lien : http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Enum.html

205voto

dystroy Points 145126

Vous ne pouvez pas voir cette méthode dans la javadoc, car il est ajouté par le compilateur.

Ceci est documenté ici : http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

Le compilateur ajoute automatiquement certaines méthodes spéciales lorsqu'il crée un enum. Par exemple, ils ont des valeurs statiques méthode qui renvoie un tableau contenant toutes les valeurs de l'enum dans l'ordre où ils sont déclarée. Cette méthode est couramment utilisé en combinaison avec le pour chaque construction pour effectuer une itération sur les valeurs d'un type enum.

L' values fonction tout simplement la liste de toutes les valeurs de l'énumération.

39voto

NPE Points 169956

La méthode est implicitement défini (i.e. généré par le compilateur).

À partir de la JLS:

En outre, si E est le nom d'un enum type, alors que le type a la suite déclarée implicitement static méthodes:

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

/**
* Returns the enum constant of this type with the specified
* name.
* The string must match exactly an identifier used to declare
* an enum constant in this type.  (Extraneous whitespace 
* characters are not permitted.)
* 
* @return the enum constant with the specified name
* @throws IllegalArgumentException if this enum type has no
* constant with the specified name
*/
public static E valueOf(String name);

13voto

Evgeniy Dorofeev Points 52031

Exécuter ce

    for (Method m : sex.class.getDeclaredMethods()) {
        System.out.println(m);
    }

vous verrez

public static test.Sex test.Sex.valueOf(java.lang.String)
public static test.Sex[] test.Sex.values()

Ce sont toutes les méthodes publiques que le "sexe" de la classe. Ils ne sont pas dans le code source, javac.exe ajouté

Notes:

  1. ne jamais utiliser le sexe comme un nom de classe, il est difficile de lire votre code, nous utilisons le Sexe en Java

  2. face à un Java puzzle comme celui-ci, je vous recommande d'utiliser un bytecode decompiler outil (j'utilise Andrey Loskutov du bytecode contour Eclispe plugin). Cela permettra de montrer à tous ce qui est à l'intérieur d'une classe

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