Middle
Optional sinfi haqida nima bilasiz?
sobes.tech AI
AIdan javob
Optional<T> - bu konteyner sinfi, u qaysi T turidagi bo'sh bo'lmagan qiymat bo'lishi yoki bo'sh bo'lishi mumkin. U Java 8 ga null ko'rsatkichlar muammosini hal qilish uchun qo'shilgan.
Asosiy metodlar:
of(T value): Bo'sh bo'lmaganOptionalyaratadi. Qiymatnullbo'lsa,NullPointerExceptiontashlaydi.ofNullable(T value): Agar mavjud bo'lsa, bo'sh bo'lmaganOptionalyaratadi, aks holda bo'shOptional.empty(): Bo'shOptionalyaratadi.isPresent(): Agar qiymat mavjud bo'lsa,true, aks holdafalse.isEmpty(): Agar qiymat mavjud bo'lmasa,true, aks holdafalse(Java 11 da qo'shilgan).get(): Agar mavjud bo'lsa, qiymatni qaytaradi, aks holdaNoSuchElementExceptiontashlaydi.orElse(T other): Agar qiymat mavjud bo'lsa, uni, aks holdaotherni qaytaradi.orElseGet(Supplier<? extends T> other): Agar qiymat mavjud bo'lsa, uni, aks holdaSupplierni bajarib, natijasini qaytaradi. BuorElse(T other)ga nisbatan afzaldir, agarotherning qiymati qimmat bo'lsa.orElseThrow(Supplier<? extends X> exceptionSupplier): Agar qiymat mavjud bo'lsa, uni, aks holdaexceptionSupplierdan chiqarilgan istisnoni tashlaydi.
NullPointerException dan qochish uchun misol:
// O'rniga
User user = findUserById(userId);
if (user != null) {
String email = user.getEmail();
// ...
}
// Optional dan foydalanish mumkin
Optional<User> userOptional = findUserByIdOptional(userId);
userOptional.ifPresent(user -> {
String email = user.getEmail();
// ...
});
orElse va orElseGet ni taqqoslash:
// Ikkala chaqiruv ham optionalUser bo'sh bo'lsa, DefaultUser ni qaytaradi
// Ammo `orElse` da, `new DefaultUser()` har doim chaqiriladi,
// hatto optionalUser qiymatga ega bo'lsa ham
User user1 = optionalUser.orElse(new DefaultUser());
// `orElseGet` da, `new DefaultUser()` faqat
// optionalUser bo'sh bo'lsa chaqiriladi
User user2 = optionalUser.orElseGet(() -> new DefaultUser());
Optional kodni o'qilishi oson va xavfsiz qilishga yordam beradi, bu qiymatning mavjud emasligini aniq ko'rsatadi. Uning sinf maydonlari yoki metod parametrlarida ishlatilmasligi kerak, agar qiymatning yo'qligi istisno holat bo'lsa.