Użycie Optional w Java

Optional w Java to kontener obiektu, który może zawierać lub nie zawierać wartości. Klasa Optional została wprowadzona w Javie 8 i służy jako alternatywa dla tradycyjnego podejścia zwracania null z metod, co pomaga uniknąć NullPointerException. Użycie Optional sprawia, że kod jest bardziej zrozumiały, pomaga w łatwiejszym zarządzaniu obecnością lub brakiem wartości i zmusza programistów do aktywnego myślenia o przypadkach, gdy wartość może być nieobecna.

Przykład użycia Optional

Załóżmy, że mamy system zarządzania sklepem z grami, w którym chcemy znaleźć informacje o grze po jej identyfikatorze. Może się zdarzyć, że gra o podanym identyfikatorze nie istnieje. W takim przypadku zamiast zwracać null, możemy zwrócić Optional<Game>.

Klasa Game
public class Game {
    private String id;
    private String name;

    // Konstruktor
    public Game(String id, String name) {
        this.id = id;
        this.name = name;
    }

    // Gettery
    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}
Klasa GameRepository

Zawiera metodę findById, która symuluje wyszukiwanie gry w bazie danych i zwraca Optional<Game>.

import java.util.Optional;

public class GameRepository {
    // Metoda wyszukująca grę po ID
    public Optional<Game> findById(String id) {
        // Tutaj symulujemy wyszukiwanie w bazie danych
        if ("123".equals(id)) {
            return Optional.of(new Game(id, "The Witcher 3"));
        } else {
            return Optional.empty();
        }
    }
}
Klasa GameRepository

Zawiera metodę findById, która symuluje wyszukiwanie gry w bazie danych i zwraca Optional<Game>.

import java.util.Optional;

public class GameRepository {
    // Metoda wyszukująca grę po ID
    public Optional<Game> findById(String id) {
        // Tutaj symulujemy wyszukiwanie w bazie danych
        if ("123".equals(id)) {
            return Optional.of(new Game(id, "The Witcher 3"));
        } else {
            return Optional.empty();
        }
    }
}
Przykład użycia w głównej klasie

Demonstruje, jak można obsłużyć obiekt Optional zwrócony przez metodę findById.

public class Main {
    public static void main(String[] args) {
        GameRepository repository = new GameRepository();

        // Użycie Optional do obsługi wyniku
        Optional<Game> game = repository.findById("123");

        // Sprawdzenie, czy wartość jest obecna 
        // i działanie w przypadku jej obecności
        game.ifPresent(g -> 
           System.out.println("Znaleziono grę: " + g.getName()));

        // Alternatywnie, używanie Optional 
        // do zwrócenia domyślnej wartości
        String gameName = game.map(Game::getName)
                              .orElse("Gra nieznaleziona");
        System.out.println(gameName);
    }
}

Podsumowanie

Użycie Optional w Javie jest potężnym narzędziem do poprawy jakości kodu, zapewniającym bardziej płynne i bezpieczne zarządzanie wartościami, które mogą być nieobecne. Zamiast zwracać i sprawdzać null, co jest podatne na błędy, Optional oferuje czytelne API do obsługi obecności lub braku wartości. Pomaga to w unikaniu NullPointerException i czyni kod bardziej zrozumiałym oraz łatwiejszym w utrzymaniu.

Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Java w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

Scroll to Top