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-ды орындап, оның нәтижесін қайтарады.
  • 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 кодты оқуға жеңіл әрі қауіпсіз етеді, оның мәні болмауы мүмкін екенін айқын көрсетеді. Ол кластың өрістері немесе әдіс параметрлері үшін қолданылмауы керек, егер жоқ мән ерекше жағдай болса.