A Java-ban a felsorolások (enums) egy speciális típus, amelyet elnevezett konstansok csoportjának meghatározására használnak.
- Az enumok segítik az olvashatóság karbantarthatóságát és a programok típusbiztonságát azáltal, hogy értelmes neveket rendelnek az egész értékekhez.
- Főleg akkor hasznos, ha van egy kis lehetséges értékkészletünk egy tételhez, például útbaigazítás a hét napjaihoz stb.
Enum létrehozása
Szintaxis:
Javaenum EnumName {
CONSTANT1 CONSTANT2 CONSTANT3;
}
enum TrafficLight { RED GREEN YELLOW; } public class Test{ public static void main(String[] args){ TrafficLight x = TrafficLight.RED; System.out.println(x); } }
Kimenet
RED
Az enum nyilatkozata Java nyelven
Az Enum deklaráció elvégezhető osztályon kívül vagy osztályon belül, de metóduson belül nem.
1. Nyilatkozat tanórán kívül
Amint a fenti példában láttuk, az enumok deklarálhatók egy osztályon kívül, és közvetlenül elérhetők
2. Nyilatkozat osztályon belül
Az enumok egy osztályon belül is deklarálhatók, de metóduson belül nem.
Javapublic class Test { enum Color { RED GREEN BLUE; } // Driver method public static void main(String[] args) { Color c1 = Color.RED; System.out.println(c1); } }
Kimenet
RED
Az Enum tulajdonságai Java nyelven
Vannak bizonyos tulajdonságok, amelyeket az Enum követ, az alábbiak szerint:
- Osztály típusa: Belsőleg osztályként valósítva meg.
- Enum állandók: Minden konstans egy enum típusú objektum.
- Kapcsoló támogatás: Használható switch utasításokban.
- Implicit módosítók: A konstansok nyilvános statikus véglegesek.
- Öröklés: Az Enumok nem bővíthetik ki az osztályokat, de interfészeket képesek megvalósítani.
Enum egy Switch nyilatkozatban
Az enum-ok a switch utasításokban használhatók különböző esetek kezelésére az enum konstansok alapján.
Javaimport java.io.*; class GFG{ // Enum Declared enum Color { RED GREEN BLUE YELLOW; } public static void main(String[] args){ Color var_1 = Color.YELLOW; // Switch case with Enum switch (var_1) { case RED: System.out.println('Red color'); break; case GREEN: System.out.println('Green color'); break; case BLUE: System.out.println('Blue color'); break; default: System.out.println('Other color'); } } }
Kimenet
Other color
Enum módszerekkel és konstruktorral
Az enumok konstruktorait és metódusait külön hajtják végre minden konstanshoz
Javaenum Color{ RED GREEN BLUE; private Color(){ System.out.println('Constructor called for: ' + this); } public void display(){ System.out.println('Color is: ' + this); } } public class Test{ public static void main(String[] args){ Color c1 = Color.RED; c1.display(); } }
Kimenet
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED
Enum absztrakt módszerekkel
Az enumok absztrakt módszereket deklarálhatnak, amelyeket minden konstansnak meg kell valósítania.
Javaenum Day{ MONDAY{ public String getNumber(){ return '1st day'; } } FRIDAY{ public String getNumber(){ return '5th day'; } }; public abstract String getNumber(); } public class EnumTest { public static void main(String[] args){ System.out.println(Day.MONDAY.getNumber()); System.out.println(Day.FRIDAY.getNumber()); } }
Kimenet
1st day 5th day
Sorszámok iterálása értékek() használatával
Használja az EnumType.values()-t az összes enum-konstans közötti ciklushoz.
Javaenum Color{ RED GREEN BLUE; } public class Test{ public static void main(String[] args){ for (Color c : Color.values()){ System.out.println(c); } } }
Kimenet
RED GREEN BLUE
Enum és EnumSet (specifikus tartomány iterációja)
Az EnumSet.range() lehetővé teszi az iterációt az enum állandók meghatározott tartományán.
Javaimport java.util.EnumSet; public class EnumSetExample{ enum Day{ SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY; } public static void main(String[] args){ EnumSet<Day> workDays = EnumSet.range(Day.TUESDAY Day.FRIDAY); for (Day d : workDays){ System.out.println(d); } } }
Kimenet
TUESDAY WEDNESDAY THURSDAY FRIDAY
Osztály létrehozása Enum taggal
Kombinálhatjuk az enumokat a normál órákkal, hogy rendszerezzük a program logikáját. Az enum lehet egy osztály tagváltozója, a metódusok pedig műveleteket hajthatnak végre az enum értéke alapján.
Java/*package whatever //do not write package name here */ import java.io.*; enum Day { MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY SUNDAY } public class EnumTest { // Enum member variable Day day; // constructor which takes enum value public EnumTest(Day day) { this.day = day; } // method to execute action as per enum value public void tellItLikeItIs() { switch (day) { case MONDAY: System.out.println('Mondays are tough'); break; case TUESDAY: System.out.println('Tuesday are better'); break; case WEDNESDAY: System.out.println('Wednesday are okay'); break; case THURSDAY: System.out.println('Thursdays are hopeful'); break; case FRIDAY: System.out.println('Fridays are exciting'); break; case SATURDAY: System.out.println('Saturdays are relaxing'); break; case SUNDAY: System.out.println('Sunday are for rest'); break; default: System.out.println('Everyday are good'); break; } } public static void main(String[] args) { EnumTest firstDay = new EnumTest(Day.MONDAY); firstDay.tellItLikeItIs(); EnumTest thirdDay = new EnumTest(Day.WEDNESDAY); thirdDay.tellItLikeItIs(); EnumTest fifthDay = new EnumTest(Day.FRIDAY); fifthDay.tellItLikeItIs(); EnumTest sixthDay = new EnumTest(Day.SATURDAY); sixthDay.tellItLikeItIs(); EnumTest seventhDay = new EnumTest(Day.SUNDAY); seventhDay.tellItLikeItIs(); } }
Kimenet
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest
Magyarázat:
- A fenti kód EnumTest osztálya Day típusú taggal jön létre. Konstruktora van, amely a Day enum-ot veszi argumentumnak, és hozzárendeli.
- Az osztály rendelkezik a tellItLikeItIs() metódussal, amely a nap értéke alapján nyomtat üzenetet.
- A fő metódus az EnumTest objektumaiból áll, amelyek különböző Day enum értékeket használnak, és mindegyiken meghívják a tellItLikeItIs() metódust.
JEGYZET: Az új kulcsszót azért használjuk, mert az EnumTest egy normál osztály, nem pedig enum, ezért példányokat hozunk létre, és az enum értéket adjuk át a konstruktorának.
összeadó teljes összeadó