Sobes.tech
Middle

Optional sinfi haqqında nə bilirsiniz?

sobes.tech Süni İntellekt

AI-dan cavab

Optional<T> - bu konteyner sinfi, T tipində boş olmayan dəyəri saxlaya bilər və ya boş ola bilər. Bu, Java 8-ə null göstəricilərinin problemini həll etmək üçün əlavə olunub.

Əsas metodlar:

  • of(T value): Boş olmayan Optional yaradır. Əgər dəyər null olarsa, NullPointerException atır.
  • ofNullable(T value): Əgər mövcuddursa, boş olmayan Optional yaradır, yoxsa boş Optional.
  • empty(): Boş Optional yaradır.
  • isPresent(): Əgər dəyər mövcuddursa, true, yoxsa false.
  • isEmpty(): Əgər dəyər yoxdursa, true, yoxsa false (Java 11-də əlavə olunub).
  • get(): Əgər mövcuddursa, dəyəri qaytarır, yoxsa NoSuchElementException atır.
  • orElse(T other): Əgər dəyər mövcuddursa, onu, yoxsa other qaytarır.
  • orElseGet(Supplier<? extends T> other): Əgər dəyər mövcuddursa, onu, yoxsa Supplier-in nəticəsini icra edib qaytarır. Bu, orElse(T other)-ə nisbətən üstün sayılır, çünki other-in qiyməti bahalıdırsa.
  • orElseThrow(Supplier<? extends X> exceptionSupplier): Əgər dəyər mövcuddursa, onu, yoxsa exceptionSupplier-dən istisna atır.

NullPointerException-dən qaçmaq üçün nümunə:

// Əvəzinə
User user = findUserById(userId);
if (user != null) {
    String email = user.getEmail();
    // ...
}

// Optional istifadə edə bilərsiniz
Optional<User> userOptional = findUserByIdOptional(userId);
userOptional.ifPresent(user -> {
    String email = user.getEmail();
    // ...
});

orElseorElseGet-in müqayisəsi:

// Hər iki çağırış optionalUser boşsa, DefaultUser qaytarır
// Amma `orElse`-da, `new DefaultUser()` hər zaman çağırılır,
// hətta optionalUser dəyər daşıyırsa belə
User user1 = optionalUser.orElse(new DefaultUser());

// `orElseGet`-də, `new DefaultUser()` yalnız
// optionalUser boş olarsa çağırılır
User user2 = optionalUser.orElseGet(() -> new DefaultUser());

Optional kodu daha oxunaqlı və təhlükəsiz edir, dəyərin mövcud olmaya biləcəyini açıq şəkildə göstərir. Sinif sahələri və ya metod parametrləri üçün istifadə edilməməlidir, əgər dəyərin olmaması istisna haldırsa.