Sobes.tech
Middle

Šta znate o klasi Optional?

sobes.tech АИ

Одговор од АИ

Optional<T> је класа контејнера која може садржати или неуказану вредност типа T или бити празна. Додата је у Java 8 како би се решио проблем null показивача.

Главне методе:

  • of(T value): Креира Optional са неуказаном вредношћу. Баца NullPointerException ако је вредност null.
  • ofNullable(T value): Креира Optional са неуказаном вредношћу ако постоји, или празан Optional ако је вредност null.
  • empty(): Креира празан Optional.
  • isPresent(): Враћа true ако је вредност присутна, иначе false.
  • isEmpty(): Враћа true ако вредност недостаје, иначе false (додато у Java 11).
  • get(): Враћа вредност ако је присутна, иначе баца NoSuchElementException.
  • orElse(T other): Враћа вредност ако је присутна, иначе other.
  • orElseGet(Supplier<? extends T> other): Враћа вредност ако је присутна, иначе извршава и враћа резултат Supplier. Преферира се у односу на orElse(T other) када је иницијализација other скупа.
  • orElseThrow(Supplier<? extends X> exceptionSupplier): Враћа вредност ако је присутна, иначе баца изузетак који пружа exceptionSupplier.

Пример коришћења за избегавање NullPointerException:

// Уместо
User user = findUserById(userId);
if (user != null) {
    String email = user.getEmail();
    // ...
}

// Може се користити Optional
Optional<User> userOptional = findUserByIdOptional(userId);
userOptional.ifPresent(user -> {
    String email = user.getEmail();
    // ...
});

Поређење orElse и orElseGet:

// Обе позива ће вратити DefaultUser ако је optionalUser празан
// Али у случају `orElse`, `new DefaultUser()` ће увек бити позван,
// чак и ако optionalUser садржи вредност
User user1 = optionalUser.orElse(new DefaultUser());

// У случају `orElseGet`, `new DefaultUser()` ће бити позван само
// ако је optionalUser празан
User user2 = optionalUser.orElseGet(() -> new DefaultUser());

Optional помаже да код буде читљивији и безбеднији, јасно указујући да вредност може недостајати. Не треба га користити за поља класа или параметре метода ако је одсуство вредности изузетна ситуација.