Sobes.tech
Middle

Шумо дар бораи синфи Optional чӣ медонед?

sobes.tech AI

Ҷавоб аз AI

Optional<T> — бұл контейнерлік класс, ол T типіндегі бос емес мәнді немесе бос болуы мүмкін. Ол null- көрсеткіштер мәселесін шешу үшін Java 8-де қосылды.

Негізгі әдістер:

  • of(T value): бос емес мәні бар Optional құрады. Егер мән null болса, NullPointerException тудырады.
  • ofNullable(T value): мән бар болса, бос емес Optional құрады, ал егер null болса, бос Optional қайтару.
  • 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)-ға қарағанда артық.
  • 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 салыстыру:

// Екі шақыру да optionalUser бос болса, DefaultUser қайтарады
// Бірақ orElse жағдайында, `new DefaultUser()` әрқашан шақырылады,
// тіпті optionalUser мәні болса да
User user1 = optionalUser.orElse(new DefaultUser());

// orElseGet жағдайында, `new DefaultUser()` тек шақырылады
// егер optionalUser бос болса
User user2 = optionalUser.orElseGet(() -> new DefaultUser());

Optional кодты оқуға жеңіл әрі қауіпсіз етеді, оның мәні болмауы мүмкін екенін айқын көрсетеді. Ол кластың өрістері немесе әдіс параметрлері үшін қолданылмауы керек, егер жоқ мән ерекше жағдай болса.