Enum erbt alle Methoden der Klasse Object
und der abstrakten Klasse Enum
. Daher können Sie seine Methoden für Reflektion, Multithreading, Serialisierung, Vergleich usw. verwenden. Wenn Sie nur eine statische Konstante anstelle von Enum deklarieren, können Sie das nicht. Außerdem kann der Wert von Enum auch an die DAO-Schicht übergeben werden.
Hier ist ein Beispielprogramm zur Demonstration.
public enum State {
Start("1"),
Wait("1"),
Notify("2"),
NotifyAll("3"),
Run("4"),
SystemInatilize("5"),
VendorInatilize("6"),
test,
FrameworkInatilize("7");
public static State getState(String value) {
return State.Wait;
}
private String value;
State test;
private State(String value) {
this.value = value;
}
private State() {
}
public String getValue() {
return value;
}
public void setCurrentState(State currentState) {
test = currentState;
}
public boolean isNotify() {
return this.equals(Notify);
}
}
public class EnumTest {
State test;
public void setCurrentState(State currentState) {
test = currentState;
}
public State getCurrentState() {
return test;
}
public static void main(String[] args) {
System.out.println(State.test);
System.out.println(State.FrameworkInatilize);
EnumTest test=new EnumTest();
test.setCurrentState(State.Notify);
test. stateSwitch();
}
public void stateSwitch() {
switch (getCurrentState()) {
case Notify:
System.out.println("Notify");
System.out.println(test.isNotify());
break;
default:
break;
}
}
}
10 Stimmen
Im seinem Buch Effective Java, Second Edition erläutert Joshua Bloch diesen Ansatz in Item 3: Enforce the Singleton Property with a Private Constructor or an enum Type, nachgedruckt in Dr. Dobb's.
1 Stimmen
Sie können Enums nicht instanziieren, da diese einen privaten Konstruktor haben. Sie werden beim Starten der JVM instanziiert, also handelt es sich um Singletons. Enums sind nicht thread-sicher.
0 Stimmen
Ich stimme dafür, diese Frage zu schließen, weil dieses Meta das besagt: meta.stackoverflow.com/questions/429367/closing-consistency