Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

where is Enum.values() defined?

Tags:

java

enums

Every Java enumeration has a static values() method can be used like this

for (MyEnum enum : MyEnum.values()) {
    // Do something with enum
}

However, I cannot figure out where this method is defined. There's no mention of it in the Javadoc and it doesn't appear anywhere in the source file.

like image 711
Dónal Avatar asked Aug 12 '09 18:08

Dónal


1 Answers

This is required by the Java Language Specification: values and valueOf will be implicitly declared for all Enums:

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

These methods are added during compile time, so if you use javap to disassemble the code, you can actually look at their body.

like image 112
andri Avatar answered Oct 14 '22 07:10

andri