Kolejny raz o języku Java ☕. Temat całkowicie poboczny dla tych, którzy chcą się nauczyć tego języka po jego każdy "centymetr kwadratowy" 😊. Jeszcze jedną fajną rzeczą w języku Java jest niejaki typ "Optional", który możesz dostrzec w niektórych kodach źródłowych "z górnej półki". O co chodzi? Zapraszam 😉!

"OPTIONAL" W JĘZYKU JAVA OSŁONĄ PRZED WARTOŚCIĄ "NULL"

Kiedy wyszła Java w wersji 8 (a było to w 2014 roku), to jedną z nowo dodanych rzeczy było właśnie "Optional". "Optional" to jeden z typów danych, który jest stosowany jako "otoczka" wokół tych obiektów, co do których jest podejrzenie, że mogą przyjąć niepożądaną wartość "null" (brak wskazywania na jakąkolwiek referencję).

Jak już pewnie wiesz, wartość "null" powoduje zgłoszenie wyjątku "NullPointerException" w chwili, gdy program próbuje w dowolny sposób (poprzez zmienną czy metodę) powołać się na składową pochodzącą od klasy, z której powstał obiekt. "Optional" w języku Java pozwala temu zapobiec 🔒 i mało tego, stosowanie tego zapisu wygląda bardziej elegancko, niż instrukcja warunkowa weryfikująca, czy coś równa się "null".

Przykład kodu źródłowego

Popatrz 👀. Załóżmy, że mamy łańcuch znaków, któremu przypisujemy "null":

String string = null;

i linijkę dalej wywołujemy jakąś metodę:

System.out.println(string.length());

Zostanie zgłoszony wyjątek 😱! Co musimy zrobić? Zabezpieczyć wywoływanie metody stosując instrukcję "if":

if(string != null) {
	System.out.println(string.length());
}

albo skorzystać z typu "Optional", który w tym wypadku przyjmie taką postać:

Optional optionalString = null;

chociaż wtedy stosujemy inny zapis - metodę "empty":

Optional optionalString = Optional.empty();

a zamiast pisać instrukcję warunkową, skorzystać z metody o nazwie "ifPresent", która oczekuje w miejsce parametru, definicji w postaci wyrażenia lambda zgodnego z interfejsem funkcyjnym "Consumer":

optionalString.ifPresent(string -> System.out.println(string.length()));

"Optional" wykorzystuje typ generyczny (nawiasy kątowe) i dzięki temu możesz wskazać kompilatorowi jaki konkretnie typ danych ma reprezentować.

Puszczenie programu w ruch spowoduje, że nic się nie wyświetli, ponieważ metoda "ifPresent" nie dopuści do wykonania instrukcji przy braku referencji. Gdyby się jednak okazało, że ona będzie (wówczas wstawiamy wartość wewnątrz metody "of"):

Optional optionalString = Optional.of("Mój łańcuch znaków");

to "Optional" będzie zawierało referencję, metoda to "dostrzeże", a napis ukaże się na wyjściu 💯.

Może i "szkoda zachodu" ⛅, jednak chciałem tylko Ci pokazać, że coś takiego istnieje i żebyś później patrząc na czyiś kod, mógł/mogła sobie pomyśleć: "aha, wiem o co chodzi!" 😀.

Jest cała "chmura" metod ☁️ jakie "Optional" w języku Java przyjmuje, jednak w tym miejscu skieruję Cię do dokumentacji.

Typ danych "Optional" w języku Java

Typ "Optional" zabezpiecza odwoływanie się do składowych obiektów danej klasy "otaczając" wywołania metodą weryfikującą, czy dana referencja nie przyjmuje wartości "null".


I to jest wszystko na ten temat.

NASTĘPNY ARTYKUŁ: record w języku Java. Niemodyfikowalna klasa danych

PODOBNE ARTYKUŁY