Middle
Ko jūs zināt par Optional klasi?
sobes.tech AI
Atbilde no AI
Optional<T> ir konteineru klase, kas varētu saturēt vai nu nepilnu vērtību tipā T, vai arī būt tukša. Tā tika pievienota Java 8, lai risinātu null norādes problēmu.
Galvenās metodes:
of(T value): IzveidoOptionalar nepilnu vērtību. MetNullPointerException, ja vērtība irnull.ofNullable(T value): IzveidoOptionalar nepilnu vērtību, ja tā ir, vai tukšuOptional, ja vērtība irnull.empty(): Izveido tukšuOptional.isPresent(): Atgriežtrue, ja vērtība ir, citādifalse.isEmpty(): Atgriežtrue, ja vērtība nav, citādifalse(pievienots Java 11).get(): Atgriež vērtību, ja tā ir, citādi metNoSuchElementException.orElse(T other): Atgriež vērtību, ja tā ir, citādiother.orElseGet(Supplier<? extends T> other): Atgriež vērtību, ja tā ir, citādi izpildaSupplierun atgriež tā rezultātu. Prioritāte irorElse(T other)dārgi inicializējotother.orElseThrow(Supplier<? extends X> exceptionSupplier): Atgriež vērtību, ja tā ir, citādi met izņēmumu, ko nodrošinaexceptionSupplier.
Piemērs, kā izvairīties no NullPointerException:
// Aizstājot
User user = findUserById(userId);
if (user != null) {
String email = user.getEmail();
// ...
}
// Var izmantot Optional
Optional<User> userOptional = findUserByIdOptional(userId);
userOptional.ifPresent(user -> {
String email = user.getEmail();
// ...
});
Salīdzinājums orElse un orElseGet:
// Abi izsaukumi atgriezīs DefaultUser, ja optionalUser ir tukšs
// Bet `orElse` gadījumā, `new DefaultUser()` tiks izsaukts vienmēr,
// pat ja optionalUser satur vērtību
User user1 = optionalUser.orElse(new DefaultUser());
// `orElseGet` gadījumā, `new DefaultUser()` tiks izsaukts tikai
// ja optionalUser ir tukšs
User user2 = optionalUser.orElseGet(() -> new DefaultUser());
Optional palīdz padarīt kodu lasāmāku un drošāku, skaidri norādot, ka vērtība var nebūt. To nevajadzētu izmantot kā klases lauka vai metodes parametra gadījumā, ja trūkstošā vērtība ir izņēmuma situācija.