Middle
Optional классы жөнүндө эмне билесиз?
sobes.tech AI
AIден жооп
Optional<T> — бул контейнер классы, ал T түрүндөгү бош эмес маанини камтышы мүмкүн же бош болушу мүмкүн. Ал null көрсөткүчтөрдүн көйгөйүн чечүү үчүн Java 8ге кошулду.
Негизги ыкмалары:
of(T value): Бош эмес мааниси барOptionalтүзөт. Эгер маанисиnullболсо,NullPointerExceptionчыгарат.ofNullable(T value): Эгер мааниси бар болсо, бош эмесOptionalтүзөт, эгерnullболсо, бошOptionalтүзөт.empty(): БошOptionalтүзөт.isPresent(): Эгер мааниси бар болсо,trueкайтарат, башкача болсоfalse.isEmpty(): Эгер мааниси жок болсо,trueкайтарат, башкача болсоfalse(Java 11де кошулду).get(): Эгер мааниси бар болсо, ал маанини кайтарат, башкача болсоNoSuchElementExceptionчыгарат.orElse(T other): Эгер мааниси бар болсо, ал маанини кайтарат, башкачаother.orElseGet(Supplier<? extends T> other): Эгер мааниси бар болсо, ал маанини кайтарат, башкачаSupplierаткарылып, анын жыйынтыгын кайтарат. Кымбат инициализация үчүнorElse(T other)караганда артыкчылык.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 салыштыруу:
// Эки чакырык да optionalUser бош болсо, DefaultUser кайтарат
// Бирок `orElse` учурда, `new DefaultUser()` ар дайым чакырылат,
// анткени optionalUser мааниси болсо да
User user1 = optionalUser.orElse(new DefaultUser());
// `orElseGet` учурда, `new DefaultUser()` гана чакырылат
// эгер optionalUser бош болсо
User user2 = optionalUser.orElseGet(() -> new DefaultUser());
Optional кодду окууну жеңилдетет жана коопсуз кылат, анын мааниси жок болушу мүмкүн экенин так көрсөтөт. Ал класстын талаалары же ыкмалардын параметрлери үчүн колдонулбашы керек, эгер жок мааниси өзгөчө кырдаал болсо.