java - que - ¿Dónde está la documentación del método de valores() de Enum?
que es un enum en java (3)
Declaro una enumeración como:
enum Sex {MALE,FEMALE};
Y luego, iterar enum como se muestra a continuación:
for(Sex v : Sex.values()){
System.out.println(" values :"+ v);
}
Revisé la API de Java pero no puedo encontrar el método de valores () Tengo curiosidad de donde viene este método?
Enlace de API: https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html
Ejecuta esto
for (Method m : sex.class.getDeclaredMethods()) {
System.out.println(m);
}
ya verás
public static test.Sex test.Sex.valueOf(java.lang.String)
public static test.Sex[] test.Sex.values()
Estos son todos los métodos públicos que tiene la clase "sexo". No están en el código fuente, javac.exe los agregó
Notas:
nunca uses sexo como nombre de clase, es difícil leer tu código, usamos Sexo en Java
Cuando me enfrento a un rompecabezas de Java como este, recomiendo utilizar una herramienta descompiladora de códigos de bytes (utilizo el complemento de ecualización de bytecode de Andrey Loskutov). Esto mostrará todo lo que hay dentro de una clase
El método está implícitamente definido (es decir, generado por el compilador).
Desde el JLS :
Además, si
E
es el nombre de un tipoenum
, entonces ese tipo tiene los siguientes métodosstatic
declarados implícitamente:
/** * 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);
No puede ver este método en javadoc porque es agregado por el compilador.
Documentado en tres lugares:
El compilador agrega automáticamente algunos métodos especiales cuando crea una enumeración. Por ejemplo, tienen un método de valores estáticos que devuelve una matriz que contiene todos los valores de la enumeración en el orden en que se declaran. Este método se usa comúnmente en combinación con el constructo for-each para iterar sobre los valores de un tipo enum.
-
Enum.valueOf
class
(El método devalues
implícitos especiales se menciona en la descripción del métodovalueOf
)
Todas las constantes de un tipo enum se pueden obtener llamando al método implícito público estático T [] values () de ese tipo.
La función de values
simplemente enumera todos los valores de la enumeración.