从哪里来的Enum.values()?

Dou*_*ugW 8 java enums android

我正在浏览文档和源代码,因为我想确定values()总是按照声明枚举值的顺序返回一个数组.事实证明,据我所知,它不在文档中.

我检查了Enum类的源代码,没有运气(有一个相关的,私有的"getValues"方法).

所以我猜测一些编译器/解释器-foo已经开始创建一个扩展Enum的类,如下所示:

public static enum MyEnum
Run Code Online (Sandbox Code Playgroud)

那么在编译期间,values()也会静态转换为硬编码数组吗?或者它实际上是在运行时调用的方法,如果是,它在哪里定义?

Dev*_*ler 13

values()方法是该enum类型定义的一部分.不要与Enum基类混淆.正式定义在JLS第8.9节中,它确定返回的顺序与它们的声明顺序相匹配.