Middle
Ինչ եք իմանում Optional դասի մասին?
sobes.tech AI
Պատասխան AI-ից
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-ը և վերադարձնում նրա արդյունքը: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 օգնում է դարձնել կոդը ավելի ընթեռնելի և անվտանգ, հստակ ցույց տալով, որ արժեքը կարող է բացակայել: Չի պետք օգտագործել այն դասի դաշտերի կամ մեթոդների պարամետրերի համար, եթե բացակա արժեքը արտակարգ իրավիճակ է։