基本上,编译器(javac)将你的枚举转换为包含在编译时所有值的静态数组。当你调用values()时,它将为你提供此数组的.clone’d()副本。
给出这个简单的枚举:
public enum Stuff { COW, POTATO, MOUSE;}你实际上可以查看Java生成的代码:
public enum Stuff extends Enum<Stuff> { COW , POTATO , MOUSE ; private static final Stuff[] $VALUES = new Stuff[]{Stuff.COW, Stuff.POTATO, Stuff.MOUSE}; public static Stuff[] values() { return (Stuff[])$VALUES.clone(); } public static Stuff valueOf(String name) { return (Stuff)Enum.valueOf(Stuff.class, name); } private Stuff( String $enum$name, int $enum$ordinal) { super($enum$name, $enum$ordinal); }}你可以通过创建一个临时目录并运行以下命令来查看javac如何“翻译”你的类:
javac -d <output directory> -XD-printflat filename.java



