Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Optional, может все так же вернуть null вместо Optional.empty()?if(person != null) {
person.ifPresent(System.out::println);
}
Optional.ofNullable(), и в методе он равен null, то вернется Optional.empty(), но при попытке использовать этот объект методом person.get() выпадет исключение java.util.NoSuchElementException. Если же указать Optional.of() возвращаемому объекту, то изначально, при попытке передать в него null, мы получим NullPointerException.return null?null, так как в этом случае мы не оборачиваем значение в описываемый класс Optional, но мы можем также обернуть его и уже по возвращении из метода.null и Optional.empty() отличаться не будет. А то я же знаю человека, который сочтет Optional<Boolean> удобным способом вернуть из метода одно из четырех значений.class MyClass {
private final int roField;
public MyClass(int value) {
this.roField = value;
}
public int getRoField() {
return roField;
}
}flatMap() и orElse() относятся к классу Optional, а не Person. Демо-проект для данной статьи Вы можете посмотреть здесь.null — я все еще надеюсь, что когда-нибудь будет добавлен Elvis Operator. Жаль, что его отложили на дальнейшие релизы :(String streetName = person.?getAddress().?getStreetName() ?: "EMPTY";Optionи еще больше в Scala
Optional optionalNullable = Optional.ofNullable(new Person());
Не удачный пример. Конструктор не межет вернуть null. Болле хороший:
Map m = ...;
Optional optionalNullable = Optional.ofNullable(m.get(...));
public void setSecondName(String secondName) {
this.secondName = Optional.of(secondName);
}
public void setAge(int age) {
this.age = Optional.ofNullable(age);
}
Person person = getDefaultPerson();
if (person != null) {
PersonAddress personAddress = person.getAddress();
if (personAddress != null) {
PersonAddressStreet street = personAddress.getStreet();
if(street != null) {
streetName = street.getStreetName();
} else {
streetName = "EMPTY";
}
}
}Person person = getDefaultPerson();
String streetName = person.flatMap(Person::getAddress)
.flatMap(PersonAddress::getStreet)
.map(PersonAddressStreet::getStreetName)
.orElse("EMPTY");Person person = getDefaultPerson();
PersonAddress personAddress = person != null ? person.getAddress() : null;
PersonAddressStreet street = personAddress != null ? personAddress.getStreet() : null;
String streetName = street != null ? street.getStreetName() : "EMPTY";public static <T> T consumeNpe(@NonNull Supplier<T> potentiallyNpeCall)
{
return noNpe(potentiallyNpeCall, null);
}
public static <T> T consumeNpe(@NonNull Supplier<T> potentiallyNpeCall, T defaultValue)
{
try
{
return potentiallyNpeCall.get();
}
catch (NullPointerException npe)
{
return defaultValue;
}
}String streetName = consumeNpe(() -> getDefaultPerson().getAddress().getStreet().getStreetName(), "EMPTY");if(person != null) {
System.out.println(person);
}person.ifPresent(System.out::println);if(person != null) System.out.println(person);.flatMap(PersonAddress::getStreet)
PersonAddressStreet street = personAddress != null ? personAddress.getStreet() : null;
Новый класс Optional в Java 8, не панацея от NullPointerException