Sobes.tech
Middle

Čo viete o triede Optional?

sobes.tech AI

Odpoveď od AI

Optional<T> je kontajnerová trieda, ktorá môže obsahovať buď ne-prázdnu hodnotu typu T, alebo byť prázdna. Bola pridaná v Jave 8 na riešenie problému null-ukazovateľov.

Hlavné metódy:

  • of(T value): Vytvára Optional s ne-prázdnou hodnotou. Vyhodí NullPointerException, ak je hodnota null.
  • ofNullable(T value): Vytvára Optional s ne-prázdnou hodnotou, ak je k dispozícii, alebo prázdny Optional, ak je hodnota null.
  • empty(): Vytvára prázdny Optional.
  • isPresent(): Vráti true, ak je hodnota prítomná, inak false.
  • isEmpty(): Vráti true, ak hodnota chýba, inak false (pridané v Jave 11).
  • get(): Vráti hodnotu, ak je prítomná, inak vyhodí NoSuchElementException.
  • orElse(T other): Vráti hodnotu, ak je prítomná, inak vráti other.
  • orElseGet(Supplier<? extends T> other): Vráti hodnotu, ak je prítomná, inak vykoná Supplier a vráti jeho výsledok. Preferované pred orElse(T other) pri nákladnej inicializácii other.
  • orElseThrow(Supplier<? extends X> exceptionSupplier): Vráti hodnotu, ak je prítomná, inak vyhodí výnimku, ktorú poskytne exceptionSupplier.

Príklad použitia na zabránenie NullPointerException:

// Namiesto
User user = findUserById(userId);
if (user != null) {
    String email = user.getEmail();
    // ...
}

// Môžete použiť Optional
Optional<User> userOptional = findUserByIdOptional(userId);
userOptional.ifPresent(user -> {
    String email = user.getEmail();
    // ...
});

Porovnanie orElse a orElseGet:

// Oba volania vrátia DefaultUser, ak je optionalUser prázdny
// Ale v prípade orElse bude `new DefaultUser()` vždy volané,
// aj keď optionalUser obsahuje hodnotu
User user1 = optionalUser.orElse(new DefaultUser());

// V prípade orElseGet bude `new DefaultUser()` volané
// iba ak je optionalUser prázdny
User user2 = optionalUser.orElseGet(() -> new DefaultUser());

Optional pomáha spraviť kód čitateľnejším a bezpečnejším, jasne naznačuje, že hodnota môže chýbať. Nemal by sa používať pre polia tried alebo parametre metód, ak chýbajúca hodnota je výnimočná situácia.