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