在java.lang.Enum类中,所有的方法如下所示:
里面并没有values()静态方法,而在我们使用enum类时,例如:enum classA{
RED,GREEN
}
可以通过java编译器的提示得到values()静态方法,这是为什么呢?
这是由于java编译器在对enum关键字进行处理时,实际上是将enum转换成为了java.lang.Enum类的一个子类来完成,而这个子类中含有values()静态方法。这一点,可以通过反编译enum类来查看。
如图,通过javap反编译enum枚举类,可以看到编译器在对enum处理时,实际上是转换成了Enum的一个子类来实现的,里面可以看到有values()静态方法的声明。