Enum și toate caracteristicile sale - 1

"Bună, Amigo!"

"Bună, Amigo!"

„O să vă spun ceva foarte interesant. Este destul de simplu, dar asta îl face și mai interesant. Se numește enumerare. O enumerare este un tip care definește setul specific de valori pe care o poate avea o variabilă. Să ne uităm la un exemplu imediat:"

Definiția unei clase enum
public enum Direction
{
 UP,
 DOWN,
 LEFT,
 RIGHT,
}
Folosind o enumerare
Direction direction = Direction.LEFT;

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

„Așa că enumerăm doar un set de valori și gata?”

„Da, declarăm o enumerare și listăm toate valorile ei posibile în interior, separate prin virgulă.”

„Este, de asemenea, destul de ușor de utilizat.”

— Îl poți seta la null?

„Da, o enumerare este o clasă obișnuită, sau mai degrabă este un fel ca o clasă, similar cu felul în care interfețele sunt ca clasele.”

„Deci oriunde pot folosi clase, pot folosi enum?”

"Da."

„Pot declara o enumerare în interiorul unei clase?”

"Da."

— Și moștenești o enumerare?

„Nu, nu poți moșteni o enumerare și o enumerare nu poate moșteni alte clase.”

"De ce este asta?"

„Deoarece compilatorul Java convertește enumerările la aproximativ acesta:

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
}

„După cum puteți vedea din acest exemplu:”

1) Clasa Direction moștenește în mod absolut clasa Enum, deci nu poate moșteni nimic altceva.

2) Clasa Direcție este declarată finală, așa că nimic altceva nu o poate moșteni.

3) Variabilele clasei Direction sunt de fapt variabile statice finale Direction publice. Acest lucru este evident în codul care le folosește:

Direction direction = Direction .LEFT ;

4) Clasa Direction conține un singur constructor și este privată. Aceasta înseamnă că obiectele Direction pot fi create numai folosind codul din interiorul clasei. În afară de obiectele declarate, nu pot fi create obiecte.

5) Variabilelor de direcție li se poate atribui o referință la oricare dintre obiectele Direcție existente. Toate sunt stabilite în enumerare. Nu există alte obiecte de acest tip și nu vor mai exista altele în viitor.

6) Obiectele de direcție pot fi comparate folosind «==», care va efectua doar o simplă comparație de referință."

„Nu aș spune că este super clar, dar este mult mai clar după exemplul tău”.

„Genial. Atunci iată câteva informații suplimentare pentru tine:”

1) Fiecare obiect Direcție are propriul său număr unic. Primul (SUS) este 0, al doilea (JOS) este 1, al treilea (STÂNGA) este 2 etc. Puteți obține acest număr folosind metoda ordinal(). "Priveste la ecran:

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

2) Fiecare enumerare are o metodă values ​​() care returnează o matrice a valorilor enumerarii.

int leftIndex = Direction.LEFT.ordinal();

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

„Aceasta înseamnă că putem obține indexul oricărui element enumerat și apoi obținem din nou elementul folosind acel index.”

„Putem folosi și o enumerare într-o buclă foreach :”

for (Direction direction : Direction.values())
{
 System.out.println(direction);
}
Ieșire ecran:
UP
DOWN
LEFT
RIGHT

„Asta înseamnă că enumerarea suprascrie metoda toString? La urma urmei, nu afișează nimic de genul:”
«com.codegym.Direction@123fd4»?

„Da. Mai mult, fiecare enumerare și, prin urmare, Direcție, poate fi convertită într-un șir și invers.”

Convertiți într-un șir:
String left = Direction.LEFT.toString(); // left == "LEFT";
Convertiți un șir într-o enumerare:
Direction direction = Direction.valueOf("LEFT");

— O, am înțeles.

"Ce se întâmplă dacă treceți un String la funcția valueOf care nu este în Direcție? De exemplu, «AMIGO»?"

"Ce crezi?"

"O exceptie?"

"Da. O excepție ilegală de argument."

— Ei bine, asta încheie introducerea noastră în lumea enumărilor.