Motivace k výčtovému typu
Chceme reprezentovat dny v týdnu.
public static final int MONDAY = 0;
public static final int TUESDAY = 1;
public static final int WEDNESDAY = 2;
-
Problémem je, že nemáme žádnou kontrolu:
-
typovou: metoda přijímající den má parametr typu int, takže bere libovolné číslo, třeba
2000
, a to nebude fungovat. -
hodnotovou: dva dny v týdnu mohou omylem mít stejnou hodnotu a překladač nám to taky neodchytí.
-
Výčtový typ
-
Typově bezpečná cesta, jak vyjmenovat a používat pojmenované konečné výčty prvků.
-
Proměnná určitého výčtového typu může pak nabývat vždy jedné hodnoty z daného výčtu.
-
Definice výčtového typu "den v týdnu":
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Příklad použití výčtu
-
Velmi příjemné použití ve větvení
switch
public String tellItLikeItIs(Day day) {
switch (day) {
case MONDAY:
return "Mondays are bad.";
case FRIDAY:
return "Fridays are better.";
case SATURDAY:
case SUNDAY:
return "Weekends are best.";
default:
return "Midweek days are so-so.";
}
}
-
Klíčové slovo
break
může být vynecháno, protožereturn
způsobí okamžitý návrat z funkce.
Výčty vs. třídy
-
Výčtový typ se koncepčně velmi podobá třídě, de facto je to třída.
-
Výčet má však jen pevně daný počet prvků (instancí).
-
Každý námi definovaný výčtový typ je potomkem třídy java.lang.Enum.
-
Podobně jako jiné třídy má vestavěné metody a může mít další metody, konstruktory apod.
Repl.it demo k výčtovým typům
Další zdroje
-
Hezký příklad najdete na The Java™ Tutorials — Enum Types