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