Enum-Klasse die Initialisierung in Java
In Java können wir folgende zur Initialisierung der Klasse und rufen Sie die Methode in dieser Klasse:
public class MyClass {
public String myClassMethod() {
return "MyClass";
}
}
.
public class Test {
public static void main(String[] args) {
MyClass myClass = new MyClass(); //initialize MyClass
myClass.myClassMethod();//call a method
}
}
Wenn meine Klasse ist eine enum
Klasse, die Umsetzung wird folgende sein:
public enum MyEnumClass {
INSTANCE;
public String myEnumClassMethod() {
return "MyEnumClass";
}
}
.
public class Test {
public static void main(String[] args) {
MyEnumClass myEnumClass = MyEnumClass.INSTANCE;
myEnumClass.myEnumClassMethod();
}
}
Beiden Fällen arbeitet in der gleichen Weise, aber es wird gesagt, um besser in die enum
Umsetzung. Meine Frage ist, warum und wie es passiert ist?
Wer sagt, dass eine enum-Implementierung ist der "bessere Weg"? Klassen haben Ihre Bedürfnisse so gut wie enums.
finden Sie Antworten hier
finden Sie Antworten hier
InformationsquelleAutor Ruchira Gayan Ranaweera | 2013-11-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer
enum
ist im wesentlichen ein singleton-Muster.Die JVM übernimmt die Initialisierung und Speicherung von
enum
Instanzen. Um zu sehen, das den meisten klar kann man schreiben:Und in einer anderen Klasse:
Diese Drucke "einen Wert für die Zeichenfolge.".
Dies zeigt, dass die
enum
- Instanzen initialisiert die von der Klasse geladen werden, d.h. als ob derstatic
initialiser.Oder anders ausgedrückt, wenn Sie nicht überschreiben
equals
imMyClass
dannIst immer
false
, in Erwägung nachstehender Gründe:Ist immer
true
. alsoMyEnumClass.INSTANCE
ist immer die gleichenMyEnumClass.INSTANCE
in der Erwägung, dass eine neueMyClass
wird jedes mal erstellt, wenn Ihr Anrufnew MyClass()
.Dies bringt uns schön auf Ihre Frage von "besser".
Einer
enum
ist eine singleton-Instanz mit verschiedenen raffinierte Methoden für die Umwandlung vonString
enum
Namen in eine Referenz zur singleton-Instanz, die Sie repräsentiert. Es gewährleistet auch, dass, wenn Sie de-serialisieren einesenum
es wird nicht in zwei getrennte Instanzen wie würde es für eine normale Klasse.So ein
enum
ist sicherlich viel besser als eine robuste und threadsicher singleton, als einclass
.Aber wir können nicht zwei Instanzen von
INSTANCE
mit den verschiedenen Werten fürsomeString
so dieenum
ist nutzlos als eineclass
...Kurz
enum
s sind gut für was Sie gut sind und fürclass
es gut für was Sie gut sind. Sie sind kein Ersatz und können daher nicht verglichen werden, in irgendeiner sinnvollen Weise zu erwarten, wenn man ist wie die anderen.kann verwendet werden als singleton-Muster, denn es ist ein singleton, damit es implementiert das singleton-Muster. Sie können hängen einige andere singleton-Werte aus der
enum
aber das ist weder hier noch dort.InformationsquelleAutor Boris the Spider
Es ist eine einfache Implementierung des Singleton-Musters, die sich auf die Mechanismen, wie Enum funktioniert.
Wenn Sie
MyEnumClass.INSTANCE
ein zweites mal, Sie bekommen die gleichen Objekt-Instanz.Im Gegensatz dazu
new MyClass();
wird ein neues Objekt erstellen.Siehe auch Diskussion hier:
Was ist der beste Ansatz für die Verwendung von Enum als singleton-Klasse in Java?
Gäbe es möglicherweise mehr zu lernen, durch das Lesen Java Language Spec-Abschnitt 8-9
InformationsquelleAutor vikingsteve