In Java sind Aufzählungen oder Aufzählungen ein spezieller Klassentyp, der eine Gruppe von Konstanten (unveränderlichen Werten) darstellt, also einen festen Satz von Werten, die sich im Laufe der Zeit nicht ändern , sodass alle möglichen Werte zur Kompilierungszeit bekannt sind, zum Beispiel Wochentage, Monate des Jahres, Farben usw.
Da es sich bei einer Aufzählung um einen Klassentyp handelt, könnte man meinen, dass wir sie instanziieren müssen, um sie verwenden zu können. Dies ist jedoch nicht erforderlich, obwohl sie über dieselben Fähigkeiten wie eine normale Klasse verfügt, z. B. Attribute, Methoden, Konstruktoren usw Selbst bei der Implementierung von Schnittstellen besteht die einzige Überlegung darin, dass Sie das Konzept der Vererbung nicht in einer Aufzählung implementieren können. Sein Hauptziel besteht darin, unsere eigenen Datentypen (Enumerated Data Types) zu definieren. Einige hervorzuhebende Eigenschaften einer Aufzählung sind:
Wir können eine Aufzählung innerhalb oder außerhalb einer Klasse oder in einer separaten Datei deklarieren, jedoch nicht innerhalb einer Methode. Die Syntax zum Deklarieren einer Enumeration lautet wie folgt:
enum NombreEnum { CONSTANTE1, CONSTANTE2, CONSTANTE3, ... }
Konventionell werden die Konstanten einer Aufzählung in Großbuchstaben geschrieben.
Typischerweise ist die erste Zeile einer Aufzählung die Deklaration der Konstanten, gefolgt von den Attributen, Methoden und Konstruktoren, falls erforderlich.
// Enum declarado fuera de una clase enum Color { RED, GREEN, BLUE; } public class Main { public static void main(String[] args) {} }
// Enum declarado dentro de una clase public class Main { public static void main(String[] args) {} enum Color { RED, GREEN, BLUE; } }
Um auf eine der Konstanten einer Aufzählung zuzugreifen, müssen wir nur den Namen der Aufzählung, gefolgt von einem Punkt und dem Namen der Konstante verwenden.
Color color = Color.RED;
Es ist vielleicht nicht so notwendig, aber wenn wir den Namen einer Konstante so erhalten müssen, wie sie deklariert wurde, können wir die Methode name() verwenden, obwohl sie bei Bedarf manchmal von der Methode toString() weggelassen wird etwas Beschreibenderes .
System.out.println(Color.RED.name()); // RED System.out.println(Color.RED); // RED
Wir können alle Konstanten einer Aufzählung mit der Methode „values()“ erhalten, die ein Array mit allen Konstanten zurückgibt.
enum NombreEnum { CONSTANTE1, CONSTANTE2, CONSTANTE3, ... }
Falls wir eine Konstante basierend auf ihrem Namen erhalten müssen, weil wir sie entweder als Eingabe, aus einer Datei oder aus einer Datenbank erhalten, können wir die Methode valueOf() verwenden, wir müssen dies nur berücksichtigen Bei der Methode wird die Groß-/Kleinschreibung beachtet. Wenn der Name also mit keiner Konstante übereinstimmt, wird eine IllegalArgumentException ausgelöst.
// Enum declarado fuera de una clase enum Color { RED, GREEN, BLUE; } public class Main { public static void main(String[] args) {} }
Zuvor haben wir gesehen, wie wir alle Konstanten als Array abrufen können. Sie denken also vielleicht: Wenn es möglich ist, den Index einer Konstante zu erhalten, lautet die Antwort: Ja, wir können zum Abrufen die Methode ordinal() verwenden der Index einer Konstante, genau wie in einem Array beginnt der Index bei Null.
// Enum declarado dentro de una clase public class Main { public static void main(String[] args) {} enum Color { RED, GREEN, BLUE; } }
Einer der Vorteile der Verwendung einer Enumeration besteht darin, dass wir sie in einer Switch-Steuerungsstruktur verwenden können, wodurch wir den Code vereinfachen und lesbarer machen können.
Color color = Color.RED;
Jede der Konstanten einer Aufzählung kann benutzerdefinierte Attribute haben, genau wie in einer normalen Klasse. Es muss lediglich berücksichtigt werden, dass es einen Konstruktor geben muss, der die Attribute initialisiert. Auf diese Weise wird dies beim Laden der Konstanten der Fall sein wird implizit an den entsprechenden Konstruktor gerufen. Da wir wissen, dass jede Konstante ein Objekt vom Typ enum in der Deklaration ist, müssen wir die Werte der Attribute entsprechend dem Konstruktor übergeben.
System.out.println(Color.RED.name()); // RED System.out.println(Color.RED); // RED
Für diese Aufzählung haben wir 3 Konstanten mit jeweils 3 Attributen, Name, Ebene und Beschreibung, zusätzlich zu einem Code-Attribut, das für alle Konstanten gemeinsam ist, aber nicht im Konstruktor initialisiert werden muss, da dies der Fall ist ein konstanter Wert. Jedes der Attribute kann unterschiedliche Zugriffsmodifikatoren haben, alles hängt von unseren Bedürfnissen ab.
Wenn wir das vorherige Beispiel betrachten, können wir daraus schließen, dass wir, da jedes Attribut vom Typ privat ist, eine Möglichkeit benötigen, auf sie zuzugreifen, damit wir Getter-Methoden für jedes der Attribute deklarieren können.
Color[] colors = Color.values(); for (Color color : colors) { System.out.println(color); }
Wir können in einer Aufzählung auch Hilfsmethoden deklarieren, beispielsweise eine Methode, die es uns ermöglicht, eine Konstante basierend auf einer Ebene zu erhalten. Sie müssen nur bedenken, dass die Methode statisch sein muss, da wir keine Aufzählung instanziieren können.
enum NombreEnum { CONSTANTE1, CONSTANTE2, CONSTANTE3, ... }
Wir haben bereits gesehen, wie man Methoden in einer Aufzählung implementiert, aber wenn wir jede Konstante benötigen, um eine Methode anders zu implementieren, können wir eine abstrakte Methode deklarieren und jede Konstante muss sie auf ihre eigene Weise implementieren, wenn man bedenkt, dass dies die Syntax ist ändert sich ein wenig in der Deklaration der Konstanten. Lassen Sie uns beispielsweise eine abstrakte Methode showPermissions() deklarieren, die die Berechtigungen jeder Konstante über die Konsole ausgibt.
// Enum declarado fuera de una clase enum Color { RED, GREEN, BLUE; } public class Main { public static void main(String[] args) {} }
Eine Aufzählung kann eine oder mehrere Schnittstellen implementieren, genau wie eine normale Klasse, es ist nur notwendig, die Schnittstellen durch ein Komma zu trennen.
// Enum declarado dentro de una clase public class Main { public static void main(String[] args) {} enum Color { RED, GREEN, BLUE; } }
Java bietet zwei Klassen für die Arbeit mit Enum, EnumSet und EnumMap, die effizienter sind als die Klassen HashSet bzw. HashMap, da sie für die Arbeit mit Enum konzipiert sind. EnumSet ist eine Sammlung eindeutiger Elemente einer Aufzählung, während EnumMap eine Implementierung von Map ist, die eine Aufzählung als Schlüssel verwendet.
Color color = Color.RED;
Wir haben bereits die verschiedenen Merkmale einer Aufzählung gesehen. Schauen wir uns nun ein Beispiel an, in dem wir sie alle nutzen.
System.out.println(Color.RED.name()); // RED System.out.println(Color.RED); // RED
Enums sind eine sehr nützliche Funktion in Java, da sie es uns ermöglichen, unsere eigenen Datentypen zu definieren, was uns hilft, unseren Code lesbarer und wartbarer zu machen und es uns ermöglicht, effizienter mit Konstanten zu arbeiten. Obwohl es sich nicht um eine neue Funktion handelt, ist es wichtig, sie zu kennen und zu wissen, wie man sie verwendet, da sie uns in vielen Fällen dabei helfen kann, unseren Code zu vereinfachen.
Das obige ist der detaillierte Inhalt vonWas sind Aufzählungen in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!