Enum en al zijn functies - 1

"Hallo Amigo!"

"Hallo Amigo!"

"Ik ga je iets heel interessants vertellen. Het is vrij eenvoudig, maar dat maakt het nog interessanter. Het wordt een enum genoemd. Een enum is een type dat de specifieke reeks waarden definieert die een variabele kan hebben. Laten we eens kijken bij een voorbeeld meteen:"

Definitie van een enum-klasse
public enum Direction
{
 UP,
 DOWN,
 LEFT,
 RIGHT,
}
Een opsomming gebruiken
Direction direction = Direction.LEFT;

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

"Dus we noemen gewoon een reeks waarden en dat is alles?"

"Ja, we declareren een opsomming en vermelden alle mogelijke waarden erin, gescheiden door een komma."

"Het is ook vrij eenvoudig te gebruiken."

"Kun je het op nul zetten?"

"Ja, een enum is een gewone klasse, of beter gezegd, het is een soort klasse, vergelijkbaar met hoe interfaces als klassen zijn."

"Dus overal waar ik klassen kan gebruiken, kan ik enum gebruiken?"

"Ja."

"Kan ik een opsomming in een klas declareren?"

"Ja."

"En een opsomming erven?"

"Nee, je kunt een enum niet erven en een enum kan geen andere klassen erven."

"Waarom is dat?"

"Omdat de Java-compiler opsommingen converteert naar ongeveer dit:

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
}

"Zoals je kunt zien in dit voorbeeld:"

1) De klasse Direction erft absoluut de klasse Enum, dus het kan niets anders erven.

2) De klasse Direction wordt als definitief verklaard, dus niets anders kan deze erven.

3) De variabelen van de klasse Direction zijn eigenlijk openbare statische definitieve direction-variabelen. Dit blijkt uit de code die ze gebruikt:

Richting richting = Richting .LINKS ;

4) De klasse Direction bevat slechts één constructor en is privé. Dat betekent dat Direction-objecten alleen kunnen worden gemaakt met behulp van code binnen de klasse. Behalve de gedeclareerde objecten kunnen er geen objecten worden gemaakt.

5) Richtingsvariabelen kunnen worden toegewezen aan een verwijzing naar een van de bestaande richtingsobjecten. Ze zijn allemaal ingesteld binnen de opsomming. Er zijn geen andere objecten van dit type en er zullen er in de toekomst ook geen andere zijn.

6) Richtingsobjecten kunnen worden vergeleken met «==», waarmee alleen een eenvoudige referentievergelijking wordt uitgevoerd."

"Ik zou niet zeggen dat het super duidelijk is, maar het is veel duidelijker na jouw voorbeeld."

"Geweldig. Dan is hier wat meer informatie voor jou:"

1) Elk Direction-object heeft zijn eigen unieke nummer. De eerste (UP) is 0, de tweede (DOWN) is 1, de derde (LEFT) is 2, etc. U kunt dit getal verkrijgen met behulp van de ordinal() methode. "Kijk naar het scherm:

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

2) Elke enum heeft een waarden () methode die een array van de waarden van de enum retourneert.

int leftIndex = Direction.LEFT.ordinal();

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

"Dit betekent dat we de index van elk enum-element kunnen krijgen en het element vervolgens opnieuw kunnen ophalen met die index."

"We kunnen ook een enum gebruiken in een foreach- lus:"

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

"Betekent dat dat enum de toString-methode overschrijft? Het geeft tenslotte niet zoiets weer als:"
«com.codegym.Direction@123fd4»?

"Ja. Bovendien kan elke enum, en dus Direction, worden omgezet in een String en vice versa."

Converteren naar een tekenreeks:
String left = Direction.LEFT.toString(); // left == "LEFT";
Converteer een tekenreeks naar een opsomming:
Direction direction = Direction.valueOf("LEFT");

"Oh ik snap het."

"Wat gebeurt er als je een String doorgeeft aan de functie valueOf die niet in Direction staat? Bijvoorbeeld «AMIGO»?"

"Wat denk je?"

"Een uitzondering?"

"Ja. Een uitzondering op een illegaal argument."

"Nou, dat rondt onze kennismaking met de wereld van opsommingen af."