Declaro uma enum como:
enum Sex {MALE,FEMALE};
E, em seguida, itere o enum, como mostrado abaixo:
for(Sex v : Sex.values()){
System.out.println(" values :"+ v);
}
Eu verifiquei a API Java, mas não consigo encontrar o método values ()? Estou curioso para saber de onde esse método vem?
Link da API: https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html
O método é definido implicitamente (isto é, gerado pelo compilador).
Do JLS :
fonte
Added by the compiler
significa que não há .java para esse código ou o código é gerado pelo compilador? Eu verifiquei o código fonte OpenJDK de Enum e não há évalues()
Rode isto
você verá
Todos esses são métodos públicos que a classe "sexo" possui. Eles não estão no código fonte, o javac.exe os adicionou
Notas:
nunca use sexo como nome de classe, é difícil ler seu código, usamos Sex in Java
ao enfrentar um quebra-cabeça Java como este, recomendo usar uma ferramenta de decompilador de bytecode (eu uso o plug-in Eclispe de contorno de bytecode de Andrey Loskutov). Isso mostrará tudo o que há dentro de uma classe
fonte