Az enum típus egy speciális adattípus, amely lehetővé teszi, hogy egy változó előre definiált konstansok halmaza legyen.
A változónak meg kell egyeznie az egyik olyan értékkel, amelyet előre meghatároztak hozzá.
Gyakori példák közé tartoznak az égtájak (NORTH, SOUTH, EAST és WEST értékek) és a hét napjai.
Mivel ezek konstansok, az enum típus mezőinek nevei csupa nagybetűvel íródnak.
A Java programozási nyelvben úgy definiálsz enum típust, hogy az enum kulcsszót használod.
Például egy hét napjait reprezentáló enum típust így adnál meg:
public enum DayOfWeek {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
}
Enum típusokat érdemes használnod, amikor konstansok egy rögzített halmazát szeretnéd reprezentálni. Ide tartoznak az olyan természetes enum típusok is, mint a Naprendszerünk bolygói, valamint azok az 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, a parancssori kapcsolók és így tovább.
Íme néhány kódrészlet, amely megmutatja, hogyan használd 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 nagyobb tudásúak, mint más nyelvek megfelelői.
Az enum deklaráció egy osztályt definiál (ezt hívják enum típusnak).
Az enum osztály törzse tartalmazhat metódusokat és egyéb mezőket:
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
Ebben a feladatban naplósorokat fogsz feldolgozni.
Minden naplósor egy string, amelynek formátuma a következő: "[<LVL>]: <MESSAGE>".
Ezek a különböző naplószintek:
TRC (trace)DBG (debug)INF (info)WRN (warning)ERR (error)FTL (fatal)Három részfeladatod van.
Definiálj egy LogLevel enumot, amelynek hat eleme van, és ezek megfelelnek a fenti naplószinteknek.
TRACEDEBUGINFOWARNINGERRORFATALEzután implementáld a LogLine.getLogLevel() metódust, amely egy naplósor feldolgozott naplószintjét adja vissza:
var logLine = new LogLine("[INF]: File deleted");
logLine.getLogLevel();
// => LogLevel.INFO
Sajnos előfordul, hogy egyes naplósorok naplószintje ismeretlen.
Hogy ezeket a naplósorokat szépen kezeld, adj hozzá egy UNKNOWN elemet a LogLevel enumhoz, amelyet ismeretlen naplószint feldolgozásakor kell visszaadni:
var logLine = new LogLine("[XYZ]: Overly specific, out of context message");
logLine.getLogLevel();
// => LogLevel.UNKNOWN
Egy naplósor naplószintje meglehetősen terjengős.
Hogy csökkentsük a naplósorok tárolásához szükséges lemezterületet, kifejlesztettek egy rövid formátumot: "[<ENCODED_LEVEL>]:<MESSAGE>".
A kódolt naplószint nem más, mint egy naplószint egyszerű hozzárendelése egy számhoz:
UNKNOWN - 0
TRACE - 1
DEBUG - 2
INFO - 4
WARNING - 5
ERROR - 6
FATAL - 42
Implementáld a LogLine.getOutputForShortLog() metódust, amely ki tudja írni a rövidített naplósor-formátumot:
var logLine = new LogLine("[ERR]: Stack Overflow");
logLine.getOutputForShortLog();
// => "6:Stack Overflow"
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Java nyelvet 26 fogalom158 feladat segítségével, valódi emberi mentorálással, mindez ingyen.