Enum et toutes ses fonctionnalités - 1

« Salut Amigo ! »

« Salut Amigo ! »

"Je vais vous parler de quelque chose de très intéressant. C'est assez simple, mais cela le rend encore plus intéressant. C'est ce qu'on appelle un enum. Un enum est un type qui définit l'ensemble spécifique de valeurs qu'une variable peut avoir. Regardons à un exemple tout de suite:"

Définition d'une classe enum
public enum Direction
{
 UP,
 DOWN,
 LEFT,
 RIGHT,
}
Utiliser une énumération
Direction direction = Direction.LEFT;

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

"Donc, nous énumérons juste un ensemble de valeurs et c'est tout ?"

"Oui, nous déclarons une énumération et listons toutes ses valeurs possibles à l'intérieur, séparées par une virgule."

"C'est aussi assez facile à utiliser."

"Pouvez-vous le mettre à null ?"

"Oui, une énumération est une classe normale, ou plutôt c'est un peu comme une classe, similaire à la façon dont les interfaces sont comme des classes."

"Donc, partout où je peux utiliser des classes, puis-je utiliser enum?"

"Oui."

"Puis-je déclarer un enum à l'intérieur d'une classe?"

"Oui."

"Et hériter d'un enum?"

"Non, vous ne pouvez pas hériter d'une énumération et une énumération ne peut pas hériter d'autres classes."

"Pourquoi donc?"

"Parce que le compilateur Java convertit les énumérations en environ ceci :

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
}

"Comme vous pouvez le voir sur cet exemple :"

1) La classe Direction hérite absolument de la classe Enum, elle ne peut donc hériter de rien d'autre.

2) La classe Direction est déclarée finale, donc rien d'autre ne peut en hériter.

3) Les variables de la classe Direction sont en fait des variables Direction finales statiques publiques. Cela est évident dans le code qui les utilise :

Direction direction = Direction .GAUCHE ;

4) La classe Direction contient un seul constructeur et il est privé. Cela signifie que les objets Direction ne peuvent être créés qu'à l'aide de code à l'intérieur de la classe. En dehors des objets déclarés, aucun objet ne peut être créé.

5) Les variables de direction peuvent se voir attribuer une référence à l'un des objets Direction existants. Ils sont tous définis dans l'énumération. Il n'y a pas d'autres objets de ce type, et il n'y en aura pas d'autres dans le futur.

6) Les objets de direction peuvent être comparés à l'aide de «==», qui effectuera simplement une simple comparaison de référence."

"Je ne dirais pas que c'est super clair, mais c'est beaucoup plus clair après ton exemple."

"Parfait. Alors voici quelques informations supplémentaires pour vous :"

1) Chaque objet Direction a son propre numéro unique. Le premier (UP) est 0, le deuxième (DOWN) est 1, le troisième (LEFT) est 2, etc. Vous pouvez obtenir ce nombre en utilisant la méthode ordinal(). "Regarde l'écran:

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

2) Chaque énumération a une méthode values ​​() qui renvoie un tableau des valeurs de l'énumération.

int leftIndex = Direction.LEFT.ordinal();

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

"Cela signifie que nous pouvons obtenir l'index de n'importe quel élément enum, puis obtenir à nouveau l'élément en utilisant cet index."

"Nous pouvons également utiliser une énumération dans une boucle foreach :"

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

"Cela signifie-t-il que l'énumération remplace la méthode toString ? Après tout, il n'affiche rien du genre :"
« com.codegym.Direction@123fd4 » ?

"Oui. De plus, chaque énumération, et donc Direction, peut être convertie en chaîne et vice versa."

Convertir en chaîne :
String left = Direction.LEFT.toString(); // left == "LEFT";
Convertissez une chaîne en une énumération :
Direction direction = Direction.valueOf("LEFT");

"Oh je comprends."

"Que se passe-t-il si vous passez une chaîne à la fonction valueOf qui n'est pas dans Direction ? Par exemple, "AMIGO" ?"

"Qu'en penses-tu?"

"Une exception?"

"Oui. Une exception IllegalArgumentException."

"Eh bien, cela conclut notre introduction au monde des énumérations."