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