В Optional, в то время как метод option.orElse является вызовом, независимо от того, присутствует ли элемент или не выполнена часть orElse, он не ведет себя как условие if else.
В приведенном ниже коде, если вы видите в случае 1, оба getNullPoJo и getDefaultPoJo выполняются, так как getNullPoJo вернет пустой Необязательно
В случае 2, где вы получите Optional с загруженным значением (из getLoadedPoJo), также вы получите getDefaultPoJo
Я просто пытаюсь понять работу по желанию.
public static void main (String [] a) {
PoJo poJo1=getNullPoJo().orElse(getDefaultPoJo());//Case 1
System.out.println("pojo1 Got "+poJo1.getVariable());
PoJo poJo2=getLoadedPoJo().orElse(getDefaultPoJo());//Case 2
System.out.println("pojo2 Got "+poJo2.getVariable());
}
private static Optional<PoJo> getNullPoJo() {
System.out.println("Executing getNullPoJo");
Optional<PoJo> optional=Optional.empty();
return optional;
}
private static Optional<PoJo> getLoadedPoJo() {
System.out.println("Executing getLoadedPoJo");
PoJo poJo =new PoJo();
poJo.setVariable("Loaded");
Optional<PoJo> optional=Optional.of(poJo);
return optional;
}
private static PoJo getDefaultPoJo() {
System.out.println("Executing getDefaultPoJo");
PoJo poJo =new PoJo();
poJo.setVariable("Default");
return poJo;
}
Текущий выход:
Выполнение getNullPoJo
Выполнение getDefaultPoJo
pojo1 получил по умолчанию
Выполнение getLoadedPoJo
Выполнение getDefaultPoJo
pojo2 получил загружен
Мой ожидаемый результат:
Выполнение getNullPoJo
Выполнение getDefaultPoJo
pojo1 получил по умолчанию
Выполнение getLoadedPoJo
pojo2 получил загружен
Я не хочу, чтобы вызов getDefaultPoJo в случае 2