Enum e tutte le sue funzionalità - 1

"Ciao, Amico!"

"Ciao, Amico!"

"Ti parlerò di qualcosa di molto interessante. È piuttosto semplice, ma questo lo rende ancora più interessante. Si chiama enum. Un enum è un tipo che definisce l'insieme specifico di valori che una variabile può avere. Diamo un'occhiata ad un esempio subito:"

Definizione di una classe enum
public enum Direction
{
 UP,
 DOWN,
 LEFT,
 RIGHT,
}
Usando un enum
Direction direction = Direction.LEFT;

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

"Quindi elenchiamo solo un insieme di valori e basta?"

"Sì, dichiariamo un enum ed elenchiamo tutti i suoi possibili valori all'interno, separati da una virgola."

"È anche abbastanza facile da usare."

"Puoi impostarlo su null?"

"Sì, un enum è una classe normale, o meglio è un po' come una classe, simile a come le interfacce sono come le classi."

"Quindi, ovunque posso usare le classi, posso usare enum?"

"SÌ."

"Posso dichiarare un enum all'interno di una classe?"

"SÌ."

"E ereditare un enum?"

"No, non puoi ereditare un enum e un enum non può ereditare altre classi."

"Perché?"

"Poiché il compilatore Java converte gli enum approssimativamente in questo:

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
}

"Come puoi vedere da questo esempio:"

1) La classe Direction eredita assolutamente la classe Enum, quindi non può ereditare nient'altro.

2) La classe Direction è dichiarata come final, quindi nient'altro può ereditarla.

3) Le variabili della classe Direction sono in realtà variabili di direzione finali statiche pubbliche. Questo è evidente nel codice che li utilizza:

Direzione direzione = Direzione .LEFT ;

4) La classe Direction contiene un solo costruttore ed è privata. Ciò significa che gli oggetti Direction possono essere creati solo utilizzando il codice all'interno della classe. Oltre agli oggetti dichiarati, non è possibile creare alcun oggetto.

5) Alle variabili di direzione può essere assegnato un riferimento a qualsiasi oggetto Direzione esistente. Sono tutti impostati all'interno dell'enumerazione. Non ci sono altri oggetti di questo tipo, e non ce ne saranno altri in futuro.

6) Gli oggetti di direzione possono essere confrontati utilizzando «==», che eseguirà semplicemente un semplice confronto di riferimento."

"Non direi che è super chiaro, ma è molto più chiaro dopo il tuo esempio."

"Fantastico. Allora ecco qualche informazione in più per te:"

1) Ogni oggetto Direzione ha il proprio numero univoco. Il primo (UP) è 0, il secondo (DOWN) è 1, il terzo (LEFT) è 2, ecc. Puoi ottenere questo numero usando il metodo ordinal(). "Guarda lo schermo:

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

2) Ogni enum ha un metodo values ​​() che restituisce un array dei valori dell'enum.

int leftIndex = Direction.LEFT.ordinal();

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

"Ciò significa che possiamo ottenere l'indice di qualsiasi elemento enum e quindi ottenere nuovamente l'elemento utilizzando quell'indice."

"Possiamo anche usare un enum in un ciclo foreach :"

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

"Ciò significa che enum sovrascrive il metodo toString? Dopotutto, non visualizza nulla del tipo:"
«com.codegym.Direction@123fd4»?

"Sì. Inoltre, ogni enum, e quindi Direction, può essere convertito in una String e viceversa."

Converti in una stringa:
String left = Direction.LEFT.toString(); // left == "LEFT";
Converti una stringa in un enum:
Direction direction = Direction.valueOf("LEFT");

"Ah, capito."

"Cosa succede se passi una stringa alla funzione valueOf che non è in Direction? Ad esempio, «AMIGO»?"

"Cosa ne pensi?"

"Un'eccezione?"

"Sì. Un'eccezione di argomento illegale."

"Bene, questo conclude la nostra introduzione al mondo delle enum."