Où est la documentation de la méthode values ​​() de Enum?

Je déclare un enum comme:

enum Sex {MALE,FEMALE}; 

Et puis, itérer enum comme indiqué ci-dessous:

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

J’ai vérifié l’API Java mais je ne trouve pas la méthode values ​​()? Je suis curieux de savoir d’où vient cette méthode?

Lien API: https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html

Vous ne pouvez pas voir cette méthode dans javadoc car elle est ajoutée par le compilateur.

Documenté à trois endroits:

  • Types Enum , Tutoriels Java

Le compilateur ajoute automatiquement des méthodes spéciales lorsqu’il crée un enum. Par exemple, ils ont une méthode de valeurs statiques qui retourne un tableau contenant toutes les valeurs de l’énumération dans l’ordre dans lequel ils sont déclarés. Cette méthode est couramment utilisée en combinaison avec la construction for-each pour parcourir les valeurs d’un type enum.

  • Enum.valueOf classe
    (La méthode des values implicites spéciales est mentionnée dans la description de la méthode valueOf )

Toutes les constantes d’un type enum peuvent être obtenues en appelant la méthode implicite publique statique T [] values ​​() de ce type.

  • Types Enum, Section 8.9 , Spécification du langage Java

La fonction de valeurs énumère simplement toutes les valeurs de l’énumération.

La méthode est implicitement définie (c’est-à-dire générée par le compilateur).

De la JLS :

De plus, si E est le nom d’un type enum , alors ce type a les méthodes static déclarées implicitement suivantes:

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

Lance ça

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

tu verras

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

Ce sont toutes des méthodes publiques que la classe “sexe” a. Ils ne sont pas dans le code source, javac.exe les a ajoutés

Remarques:

  1. n’utilisez jamais le sexe comme nom de classe, il est difficile de lire votre code, nous utilisons Sex in Java

  2. face à un puzzle Java comme celui-ci, je recommande d’utiliser un outil de décompilation de bytecode (j’utilise le plugin Eclispe de contour de bytecode d’Andrey Loskutov). Cela montrera tout ce qu’il y a à l’intérieur d’une classe