Giving this enumeration as Example:
enum Compass {
NORTH(0),
EAST(90),
SOUTH(180),
WEST(270);
private int degree;
Compass(int deg){
degree = deg;
}
public int getDegree(){
return degree;
}
}
In Java an enum class is like any other class but has some definied constants for the enum values. Additionally it has a field that is an array that holds all the values and two static methods with name values() and valueOf(String).
We can see this if we use Reflection to print all fields in this class
for(Field f : Compass.class.getDeclaredFields())
System.out.println(f.getName());
the output will be:
NORTH
EAST
SOUTH
WEST
degree
ENUM$VALUES
So we could examine enum classes with Reflection like any other class. But the Reflection API offers three enum-specific methods.
enum check
Compass.class.isEnum();
Returns true for classes that represents an enum type.
retrieving values
Object[] values = Compass.class.getEnumConstants();
Returns an array of all enum values like Compass.values() but without the need of an instance.
enum constant check
for(Field f : Compass.class.getDeclaredFields()){
if(f.isEnumConstant())
System.out.println(f.getName());
}
Lists all the class fields that are enum values.