现在我正在试图找出java中的Enum究竟是什么。我知道它们是如何工作的以及如何/何时使用它们但是我对它们究竟是什么有点不清楚。基于他们的行为,在我看来,他们只不过是一个私有构造函数的类。然而,在我看来,编译器正在对它们做一些特殊的事情,因为Enums有一个名为values()
的特殊方法,它不会出现在Oracle doc站点的Enum类中。
我的问题是,Enums究竟是什么以及编译器如何解释它们?
答案 0 :(得分:5)
正如您所提到的,enum
是一个继承自Enum
类的类,其中包含(a)private
构造函数; (b)已命名的final
个实例的固定列表。
在幕后,当您声明enum
:
public enum Foo {
A(1) {
public void bar() {
System.out.println("A#bar");
}
},
B(2) {
public void bar() {
System.out.println("B#bar");
}
},
C(3) {
public void bar() {
System.out.println("C#bar");
}
};
private Foo(int x) {
// Code goes here...
}
public abstract void bar();
}
...你可以想象编译器生成这样的东西:
public class Foo extends Enum<Foo> {
public static final Foo A=new Foo(1) {
public void bar() {
System.out.println("A#bar");
}
};
public static final Foo B=new Foo(2) {
public void bar() {
System.out.println("B#bar");
}
};
public static final Foo C=new Foo(3) {
public void bar() {
System.out.println("C#bar");
}
};
private Foo(int x) {
// Code goes here...
}
}
还有一些其他因素使enum
变得特别: