在java.lang.Enum类中,所有的方法如下所示:
示例 :
package enumdemo;
public enum TestEnum {
//枚举对象
YANLONG("炎龙侠",0),
FENGYING("风鹰侠",1),
HEIXI("黑犀侠",2),
XUEAO("雪獒侠",3);
public String armour;
public int ordinal;
//枚举的构造方法默认是私有的
TestEnum() {
}
private TestEnum(String armour,int ordinal) {
this.armour = armour;
this.ordinal = ordinal;
}
public static void main(String[] args) {
TestEnum[] testEnums = TestEnum.values();
for (int i = 0; i < testEnums.length; i++) {
System.out.println(testEnums[i]+" -> "+ testEnums[i].ordinal());
//testEnums[i].ordinal()输出枚举对象的序号,默认从0开始
}
}
}
里面并没有values()静态方法,而在我们使用enum类时,却可以通过java编译器的提示得到values()静态方法,这是为什么呢?
这是由于java编译器在对enum关键字进行处理时,实际上是将enum转换成为了java.lang.Enum类的一个子类来完成,而这个子类中含有values()静态方法。这一点,可以通过反编译enum类来查看。
如图,通过javap反编译TestEnum枚举类,可以看到编译器在对enum处理时,实际上是转换成了Enum的一个子类来实现的,里面可以看到有values()静态方法的声明。
参考文章 : 关于Enum枚举类没有values()方法却可以在枚举类中使用的问题