Sobes.tech
Middle

Ko jūs zināt par Optional klasi?

sobes.tech AI

Atbilde no AI

Optional<T> ir konteineru klase, kas varētu saturēt vai nu nepilnu vērtību tipā T, vai arī būt tukša. Tā tika pievienota Java 8, lai risinātu null norādes problēmu.

Galvenās metodes:

  • of(T value): Izveido Optional ar nepilnu vērtību. Met NullPointerException, ja vērtība ir null.
  • ofNullable(T value): Izveido Optional ar nepilnu vērtību, ja tā ir, vai tukšu Optional, ja vērtība ir null.
  • empty(): Izveido tukšu Optional.
  • isPresent(): Atgriež true, ja vērtība ir, citādi false.
  • isEmpty(): Atgriež true, ja vērtība nav, citādi false (pievienots Java 11).
  • get(): Atgriež vērtību, ja tā ir, citādi met NoSuchElementException.
  • orElse(T other): Atgriež vērtību, ja tā ir, citādi other.
  • orElseGet(Supplier<? extends T> other): Atgriež vērtību, ja tā ir, citādi izpilda Supplier un atgriež tā rezultātu. Prioritāte ir orElse(T other) dārgi inicializējot other.
  • orElseThrow(Supplier<? extends X> exceptionSupplier): Atgriež vērtību, ja tā ir, citādi met izņēmumu, ko nodrošina exceptionSupplier.

Piemērs, kā izvairīties no NullPointerException:

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

// Var izmantot Optional
Optional<User> userOptional = findUserByIdOptional(userId);
userOptional.ifPresent(user -> {
    String email = user.getEmail();
    // ...
});

Salīdzinājums orElse un orElseGet:

// Abi izsaukumi atgriezīs DefaultUser, ja optionalUser ir tukšs
// Bet `orElse` gadījumā, `new DefaultUser()` tiks izsaukts vienmēr,
// pat ja optionalUser satur vērtību
User user1 = optionalUser.orElse(new DefaultUser());

// `orElseGet` gadījumā, `new DefaultUser()` tiks izsaukts tikai
// ja optionalUser ir tukšs
User user2 = optionalUser.orElseGet(() -> new DefaultUser());

Optional palīdz padarīt kodu lasāmāku un drošāku, skaidri norādot, ka vērtība var nebūt. To nevajadzētu izmantot kā klases lauka vai metodes parametra gadījumā, ja trūkstošā vērtība ir izņēmuma situācija.