Чтобы вернуть значение из getFooFromService
, необходимо выполнить function_1
и три or
с, что означает, что их параметры будут оценены. function_2
и function_3
будут выполняться при любых обстоятельствах.
Опция, которая может подойти вам, - это перегруженная версия, которая принимает Supplier
, что подразумевает ленивую оценку.
public abstract T or(Supplier<? extends T> supplier)
UPDATE
Это @Beta
метод (подлежит изменению), и я считаю его совершенно бесполезным. Это разрешает от Supplier<? extend T>
до T
, таким образом, разрушает возможность построения цепочки. По сути, вы не можете переписать свой фрагмент, чтобы использовать этот метод.
ОБНОВЛЕНИЕ 1
Но вы можете переключиться на Java Optional
и написать
return function_1()
.orElseGet(() -> function_2()
.orElseGet(() -> function_3()
.orElse(DEFAULT_VAL)));
, который не так выразителен, но работает, как ожидалось.
Мое форматирование ужасно, но вы поняли;)