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ş olmayanOptionalyaradır. Əgər dəyərnullolarsa,NullPointerExceptionatır.ofNullable(T value): Əgər mövcuddursa, boş olmayanOptionalyaradır, yoxsa boşOptional.empty(): BoşOptionalyaradır.isPresent(): Əgər dəyər mövcuddursa,true, yoxsafalse.isEmpty(): Əgər dəyər yoxdursa,true, yoxsafalse(Java 11-də əlavə olunub).get(): Əgər mövcuddursa, dəyəri qaytarır, yoxsaNoSuchElementExceptionatır.orElse(T other): Əgər dəyər mövcuddursa, onu, yoxsaotherqaytarır.orElseGet(Supplier<? extends T> other): Əgər dəyər mövcuddursa, onu, yoxsaSupplier-in nəticəsini icra edib qaytarır. Bu,orElse(T other)-ə nisbətən üstün sayılır, çünkiother-in qiyməti bahalıdırsa.orElseThrow(Supplier<? extends X> exceptionSupplier): Əgər dəyər mövcuddursa, onu, yoxsaexceptionSupplier-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();
// ...
});
orElse və orElseGet-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.