W Javie wyliczenia (wyliczenia) są specjalnym typem używanym do definiowania grupy nazwanych stałych.
- Wyliczenia pomagają w utrzymaniu czytelności i bezpieczeństwie typów w programach, przypisując znaczące nazwy wartościom całkowitym.
- Przydatne głównie, gdy mamy mały zestaw możliwych wartości elementu, np. wskazówki, dni tygodnia itp.
Tworzenie wyliczenia
Składnia:
es5 kontra es6
Javawyliczenie Nazwa wyliczenia {
STAŁA1 STAŁA2 STAŁA3;
}
rstrip Pythona
enum TrafficLight { RED GREEN YELLOW; } public class Test{ public static void main(String[] args){ TrafficLight x = TrafficLight.RED; System.out.println(x); } }
Wyjście
RED
Deklaracja wyliczenia w Javie
Deklarację wyliczenia można wykonać poza klasą lub wewnątrz klasy, ale nie wewnątrz metody.
1. Deklaracja poza zajęciami
Jak widzieliśmy w powyższym przykładzie wyliczenia można zadeklarować poza klasą i uzyskać do nich bezpośredni dostęp
2. Deklaracja wewnątrz klasy
Wyliczenia można również deklarować wewnątrz klasy, ale nie wewnątrz metody.
Java
public class Test { enum Color { RED GREEN BLUE; } // Driver method public static void main(String[] args) { Color c1 = Color.RED; System.out.println(c1); } }
Wyjście
RED
Właściwości Enum w Javie
Istnieją pewne właściwości, po których następuje Enum, jak wspomniano poniżej:
gdzie jest klawisz wstawiania na klawiaturze laptopa
- Typ klasy: Zaimplementowane wewnętrznie jako klasa.
- Stałe wyliczeniowe: Każda stała jest obiektem typu wyliczeniowego.
- Przełącznik wsparcie: Można go używać w instrukcjach switch.
- Niejawne modyfikatory: Stałe są publicznym, statycznym finałem.
- Dziedzictwo: Wyliczenia nie mogą rozszerzać klas, ale mogą implementować interfejsy.
Enum w instrukcji Switch
Wyliczenia mogą być używane w instrukcjach switch do obsługi różnych przypadków w oparciu o stałe wyliczeniowe.
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'); } } }
Wyjście
Other color
Wyliczenie z metodami i konstruktorem
Wyliczenia mogą mieć konstruktory i metody wykonywane oddzielnie dla każdej stałej
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(); } }
Wyjście
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED
Wyliczenie z metodami abstrakcyjnymi
Wyliczenia mogą deklarować metody abstrakcyjne, które każda stała musi implementować.
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()); } }
Wyjście
1st day 5th day
Iterowanie wyliczeń za pomocą wartości()
Użyj EnumType.values() do przeglądania wszystkich stałych wyliczeniowych.
Oświadczenie w sprawie VerilogJava
enum Color{ RED GREEN BLUE; } public class Test{ public static void main(String[] args){ for (Color c : Color.values()){ System.out.println(c); } } }
Wyjście
RED GREEN BLUE
Enum i EnumSet (Iteracja określonego zakresu)
EnumSet.range() umożliwia iterację po określonym zakresie stałych wyliczeniowych.
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); } } }
Wyjście
TUESDAY WEDNESDAY THURSDAY FRIDAY
Tworzenie klasy z członkiem Enum
Możemy łączyć wyliczenia ze zwykłymi klasami, aby uporządkować logikę programu. Wyliczenie może być zmienną składową klasy, a metody mogą wykonywać akcje na podstawie wartości wyliczenia.
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(); } }
Wyjście
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest
Wyjaśnienie:
- Klasa EnumTest w powyższym kodzie jest tworzona z elementem typu Day. Posiada konstruktor, który przyjmuje wyliczenie Day jako argument i przypisuje je.
- Klasa posiada metodę tellItLikeItIs(), która wypisuje komunikat w oparciu o wartość dnia.
- Główna metoda obejmuje obiekty EnumTest używające różnych wartości wyliczeniowych Day i wywołujące metodę tellItLikeItIs() na każdym z nich.
NOTATKA: Używane jest słowo kluczowe new, ponieważ EnumTest jest zwykłą klasą, a nie wyliczeniem, dlatego tworzymy instancje i przekazujemy wartość wyliczenia do jej konstruktora.