Enum und alle seine Funktionen - 1

„Hallo, Amigo!“

„Hallo, Amigo!“

„Ich werde Ihnen etwas sehr Interessantes erzählen. Es ist ziemlich einfach, aber das macht es noch interessanter. Man nennt es eine Aufzählung. Eine Aufzählung ist ein Typ, der den spezifischen Satz von Werten definiert, die eine Variable haben kann. Schauen wir mal gleich an einem Beispiel:"

Definition einer Enum-Klasse
public enum Direction
{
 UP,
 DOWN,
 LEFT,
 RIGHT,
}
Verwendung einer Enumeration
Direction direction = Direction.LEFT;

if (direction == Direction.LEFT)
 direction = Direction.RIGHT;
else
 direction = Direction.DOWN;

„Also listen wir einfach eine Reihe von Werten auf und das war’s?“

„Ja, wir deklarieren eine Enumeration und listen darin alle möglichen Werte auf, getrennt durch ein Komma.“

„Außerdem ist es recht einfach zu bedienen.“

„Können Sie es auf Null setzen?“

„Ja, eine Aufzählung ist eine reguläre Klasse, oder vielmehr eine Art Klasse, ähnlich wie Schnittstellen wie Klassen.“

„Kann ich also überall dort, wo ich Klassen verwenden kann, Enum verwenden?“

"Ja."

„Kann ich eine Aufzählung innerhalb einer Klasse deklarieren?“

"Ja."

„Und eine Aufzählung erben?“

„Nein, Sie können eine Aufzählung nicht erben und eine Aufzählung kann keine anderen Klassen erben.“

"Warum das?"

„Weil der Java-Compiler Aufzählungen ungefähr so ​​umwandelt:

public final class Direction extends Enum
{
 public static final Direction UP = new Direction();
 public static final Direction DOWN = new Direction();
 public static final Direction LEFT = new Direction();
 public static final Direction RIGHT = new Direction();

 private Direction() {} // Private constructor
}

„Wie Sie an diesem Beispiel sehen können:“

1) Die Direction-Klasse erbt absolut die Enum-Klasse, kann also nichts anderes erben.

2) Die Direction-Klasse wird als final deklariert, sodass nichts anderes sie erben kann.

3) Die Variablen der Direction-Klasse sind tatsächlich öffentliche statische endgültige Direction-Variablen. Dies wird im Code deutlich, der sie verwendet:

Richtung Richtung = Richtung .LINKS ;

4) Die Direction-Klasse enthält nur einen Konstruktor und ist privat. Das bedeutet, dass Direction-Objekte nur mit Code innerhalb der Klasse erstellt werden können. Außer den deklarierten Objekten können keine Objekte erstellt werden.

5) Richtungsvariablen kann eine Referenz auf jedes der vorhandenen Richtungsobjekte zugewiesen werden. Sie sind alle innerhalb der Enumeration festgelegt. Es gibt keine weiteren Objekte dieser Art und es wird auch in Zukunft keine weiteren geben.

6) Richtungsobjekte können mit „==“ verglichen werden, was lediglich einen einfachen Referenzvergleich durchführt.“

„Ich würde nicht sagen, dass es superklar ist, aber nach Ihrem Beispiel ist es viel klarer.“

„Super. Dann hier noch ein paar weitere Informationen für Sie:“

1) Jedes Richtungsobjekt hat seine eigene eindeutige Nummer. Die erste (UP) ist 0, die zweite (DOWN) ist 1, die dritte (LEFT) ist 2 usw. Sie können diese Zahl mit der Methode ordinal() erhalten. "Schau auf den Bildschirm:

Direction direction = Direction.LEFT;
int index = direction.ordinal();
int index2 = Direction.RIGHT.ordinal();

2) Jede Aufzählung verfügt über eine Methode „values ()“, die ein Array der Werte der Aufzählung zurückgibt.

int leftIndex = Direction.LEFT.ordinal();

Direction[] array = Direction.values();
Direction left = array[leftIndex];

„Das bedeutet, dass wir den Index jedes Enum-Elements abrufen und das Element dann mithilfe dieses Index erneut abrufen können.“

„Wir können eine Aufzählung auch in einer foreach- Schleife verwenden :“

for (Direction direction : Direction.values())
{
 System.out.println(direction);
}
Bildschirmausgabe:
UP
DOWN
LEFT
RIGHT

„Bedeutet das, dass enum die toString-Methode überschreibt? Schließlich wird nichts angezeigt wie:“
„com.codegym.Direction@123fd4“?

„Ja. Darüber hinaus kann jede Aufzählung und damit jede Richtung in einen String umgewandelt werden und umgekehrt.“

In einen String konvertieren:
String left = Direction.LEFT.toString(); // left == "LEFT";
Konvertieren Sie einen String in eine Enumeration:
Direction direction = Direction.valueOf("LEFT");

"Oh, verstanden."

„Was passiert, wenn Sie einen String an die valueOf-Funktion übergeben, der nicht in Richtung ist? Zum Beispiel „AMIGO“?“

"Was denken Sie?"

"Eine Ausnahme?"

„Ja. Eine IllegalArgumentException.“

„Nun, damit ist unsere Einführung in die Welt der Aufzählungen abgeschlossen.“