以该枚举为例:
enum Compass { NORTH(0), EAST(90), SOUTH(180), WEST(270); private int degree; Compass(int deg){ degree = deg; } public int getDegree(){ return degree; } }
在Java中,枚举类与其他任何类一样,但是对于枚举值具有一些定义的常量。此外,它还有一个字段,该字段是一个包含所有值的数组以及两个名为namevalues()和的静态方法valueOf(String)。
如果我们使用反射来打印此类中的所有字段,我们可以看到这一点
for(Field f : Compass.class.getDeclaredFields()) System.out.println(f.getName());
输出将是:
NORTH
EAST
SOUTH
WEST
程度
ENUM $VALUES
因此,我们可以像其他任何类一样使用反射检查枚举类。但是Reflection API提供了三种特定于枚举的方法。
枚举检查
Compass.class.isEnum();
对于表示枚举类型的类返回true。
检索值
Object[] values = Compass.class.getEnumConstants();
返回所有枚举值的数组,例如但不需要实例。Compass.values()
枚举常量检查
for(Field f : Compass.class.getDeclaredFields()){ if(f.isEnumConstant()) System.out.println(f.getName()); }
列出所有属于枚举值的类字段。