
Co to jest enum?
Enum jest typem wyliczeniowy, który służy do przechowywania wartości stałych. Przykładem wartości jakie możemy tam przechowywać są:
- planety układy słonecznego,
- jednostki miar,
- dyscypliny sportu,
- kolory,
- możliwości płatności online w sklepie internetowym,
- rodzaj publikacji na blogu np. artykuł, ogłoszenie lub krótki wpis.
Do deklaracji typu wyliczeniowego w Javie służy słowo kluczowe enum. Deklaracja przykładowego enuma dla kolorów wygląda następująco:
enum Colors { WHITE, BLACK }
W przeciwieństwie do innych języków, typ wyliczeniowy w Javie jest bardzo dobrze rozbudowany. W Javie enum na bazuje obiektowości, dzięki czemu tworzymy klasę (tzw. enum type), i mamy do dyspozycji predefiniowane metody oraz mamy możliwość tworzenia własnych metod dla każdego enuma z osobna.
public enum Colors { WHITE("#ffffff"), BLACK("#000000"); private final String hex; Colors(String hex) { this.hex = hex; } public String getHex() { return hex; } public static void main(String[] args) { System.out.println(Colors.WHITE.getHex()); } }
W naszym przypadku enum type to Colors. Jak można zauważyć, enum zachowuje się (prawie) jak zwykła klasa. Można tworzyć w niej własne metody oraz pola.
Jeśli chcesz się dowiedzieć więcej na temat enuma w Javie, zachęcam do lektury następujących materiałów:
- Obszerny artykuł na temat typu wyliczeniowego – enum wzięty na warsztat i przeanalizowany od deski do deski,
- Poznaj predefiniowane metody każdego enuma
- Oficjalna dokumentacja Oracle
Fajny artykuł dużo przydatnej wiedzy, dziękuję.
No ok, rozumiem. Ale czym się różni od innych typów po za obiektowościa? Ceny możemy przechowywać we flotach, numery planet w intach itd.
Jak najbardziej stałe możemy przechowywać jako pola statyczne w klasie. I pomimo dodania Enuma w Java 1.5, nadal te pola statyczne są wykorzystywane.
Enum ma tą przewagę nad polami statycznymi, że wszystkie wartości są pogrupowane w jeden typ (np. enum Color { RED, BLACK } – wszystkie kolory mają swój typ Color, a nie String). Jest to bardzo przydatne – przestajemy już mieć wszędzie w kodzie np. Stringi, tylko konkretny typ (kod jest bardziej odporny na błędy).
Dodatkowo, czasami w niektórych stałych chcemy przechowywać dodatkowe wartości lub chociażby przypisać do niej metodę.
Oczywiście te dwie powyższe cechy mają również zwykłe klasy – w końcu można stworzyć np. własną klasę Color, a jako pola statyczne trzymać instancje tej klasy np. Color BLACK = new Color(“#000000”). I jak najbardziej – tylko po co? Właśnie to nam dostarcza Enum, a przy okazji zapewnia, że wartości enuma są stałe przez cały cykl życia aplikacji i nie mogą zostać jawnie zmienione.
Więcej możesz przeczytać o enumie możesz poczytać tutaj https://1024kb.pl/nauka-java/enum-java/