Enum

Dziś dla odmiany temat bardzo krótki. Ma on jednak kilka zastosowań w programowaniu obiektowym. Pokażę wam w jaki definiować konkretne zbiory stałych. Zapraszam do lektury.

Czym jest enum?

Jest to typ wyliczeniowy, który pozwala nam zdefiniować zbiór stałych.

Troszkę prościej? Wyobraź sobie, że znamy wszystkie wartości danego zbioru. Mogą to być na przykład dni tygodnia, kierunki świata czy też płeć człowieka. W takim przypadku możemy zapisać je jako jedyne dopuszczalne wartości danego zbioru.

Ważne jest to, że typ wyliczeniowy pozwala nam na wykorzystanie jedynie tych wartości, które zdefiniowaliśmy wcześniej (przed kompilacją programu).

Budowa typów wyliczeniowych

Do definicji typów wyliczeniowych używamy słowa kluczowego enum.

Wartości definiujemy po przecinku. Średnik na końcu nie jest wymagany, chyba, że zdecydujemy się rozbudować naszą klasę o dodatkowe pola lub metody.

Klasa?

Chwila, chwila, czy on powiedział klasę? Tak, definicja typu wyliczeniowego to nic innego jak definicja klasy rozszerzającej abstrakcyjną klasę java.lang.Enum. Oznacza to, że w typach wyliczeniowych dozwolona jest deklaracja zmiennych oraz metod. Jak pamiętamy jednak wielodziedziczenie w javie nie jest dozwolone, dlatego typy wyliczeniowe nie mogą już dziedziczyć po żadnej innej klasie.

W przypadku gdy, obok nazwy naszej stałej podamy argumenty w nawiasie, wtedy wywołany zostanie konstruktor, który pozwoli nam na odpowiednie przetworzenie podanych wartości.

Jak widać w przykładzie powyżej, każdy z naszych dni tygodnia rozbudowany został o wartość liczbową, która odpowiada kolejności ich występowania. Wartość ta została zapisana do zmiennej dayNumber.

Modyfikatory

Wszystkie typy wyliczeniowe domyślnie deklarowane są jako final, a jedynymi dopuszczalnymi modyfikatorami dostępu są public oraz default.

Co zawierają typy wyliczeniowe?

Jako, że dziedziczymy po klasie abstrakcyjnej Enum dostarczane jest nam kilka podstawowych metod o których właśnie sobie powiemy. Dwie z nich są metodami statycznymi.

values

Zwraca zbiór wszystkich wartości w postaci tablicy.

valueOf

Zwraca konkretny obiekt z naszego zbioru.

zwróci nam obiekt

ordinal

Zwraca kolejność naszego elementu w zbiorze liczone od zera. Jak widać więc w przypadku typów wyliczeniowych kolejność ma znaczenie.

Powyższy przykład zwróci nam wartość 5.

name

Zwraca nazwę wartości typu wyliczeniowego w postaci String

Metody abstrakcyjne

Typy wyliczeniowe mogą zawierać w sobie metody abstrakcyjne. Pewnie zastanawiasz się gdzie miałyby zostać one zadeklarowane, skoro z założenia enumy są już wartościami finalnymi.

Okazuje się jednak, że możemy nadpisać je w momencie ich deklaracji.
Pozwoli nam to na stworzenie unikalnych formuł które będą realizowały inne działania w zależności od przypadku.

Pomimo, że oby dwie z tych wartości znajdują się w jednym typie wyliczeniowym, działanie metody saySomething w przypadku każdego z nich da nam inny wynik.

Takim oto sposobem dotarliśmy do samego końca. Jak już wspomniałem temat łatwy, krótki i przyjemny. Namawiam jednak do próby implementacji kilku przykładowych typów wyliczeniowych. Jeden z bardzo fajnych przykładów został przedstawiony w dokumentacji Oracle. Pokazuje on jak napisać program, w którym obliczymy swoją wagę w zależności od planety na której się znajdziemy (przykład tutaj). Miłego wieczoru!

Your email address will not be published. Required fields are marked *

*