Az enum típus egy különleges adattípus, amely lehetővé teszi, hogy egy változó előre definiált konstansok halmazából vegyen fel értéket.
A változónak meg kell egyeznie az egyik előre definiált értékkel.
Gyakori példák az égtájak (NORTH, SOUTH, EAST és WEST értékei) és a hét napjai.
Mivel konstansokról van szó, az enum típus mezőinek nevét csupa nagybetűvel írjuk.
A Java programozási nyelvben az enum kulcsszóval definiálhatsz enum típust.
Egy hét napjait leíró enum típust például így adsz meg:
public enum DayOfWeek {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
}
Mindig enum típust érdemes használnod, amikor konstansok rögzített halmazát szeretnéd reprezentálni. Ide tartoznak a természetes enum típusok, például a Naprendszer bolygói, valamint az olyan adathalmazok, amelyeknél fordítási időben ismered az összes lehetséges értéket - például egy menü választási lehetőségei, parancssori kapcsolók és így tovább.
Az alábbi kód megmutatja, hogyan használhatod a fent definiált DayOfWeek enumot:
public class Shop {
public String getOpeningHours(DayOfWeek dayOfWeek) {
switch (dayOfWeek) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
return "9am - 5pm";
case SATURDAY:
return "10am - 4pm"
case SUNDAY:
return "Closed.";
}
}
}
var shop = new Shop();
shop.getOpeningHours(DayOfWeek.WEDNESDAY);
// => "9am - 5pm"
A Java programozási nyelv enum típusai sokkal erősebbek, mint más nyelvek megfelelői.
Az enum deklaráció egy osztályt definiál (amit enum típusnak nevezünk).
Az enum osztály törzse metódusokat és további mezőket tartalmazhat:
public enum Rating {
GREAT(5),
GOOD(4),
OK(3),
BAD(2),
TERRIBLE(1);
private final int numberOfStars;
Rating(int numberOfStars) {
this.numberOfStars = numberOfStars;
}
public int getNumberOfStars() {
return this.numberOfStars;
}
}
A getNumberOfStars metódus meghívása a Rating enum típus egyik tagján:
Rating.GOOD.getNumberOfStars();
// => 4
A fordító automatikusan hozzáad néhány különleges metódust, amikor létrehoz egy enumot.
Például rendelkeznek egy statikus values metódussal, amely egy tömböt ad vissza, benne az enum összes értékével, a deklaráció sorrendjében:
for (DayOfWeek dayOfWeek : DayOfWeek.values()) {
System.out.println(dayOfWeek.toString());
}
A fenti kódrészlet a következőt írja ki:
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
A fordító emellett egy statikus valueOf metódust is hozzáad, amely a neve alapján adja vissza az enum egyik tagját:
DayOfWeek.valueOf("SUNDAY");
// => DayOfWeek.SUNDAY