Я работал с новым необязательным типом в Java 8, и я столкнулся с тем, что похоже на общую операцию, которая не является 't поддерживается функционально: "orElseOptional"
Рассмотрим следующий шаблон:
Optional<Result> resultFromServiceA = serviceA(args);
if (resultFromServiceA.isPresent) return result;
else {
Optional<Result> resultFromServiceB = serviceB(args);
if (resultFromServiceB.isPresent) return resultFromServiceB;
else return serviceC(args);
}
Существует много форм этого шаблона, но он сводится к желанию "orElse" на необязательном, который принимает функцию, производящую новую опцию, называемую только в том случае, если текущий не существует.
Реализация будет выглядеть так:
public Optional<T> orElse(Supplier<Optional<? extends T>> otherSupplier) {
return value != null ? this : other.get();
}
Мне любопытно, есть ли причина, по которой такой метод не существует, если я просто использую Необязательный непреднамеренно, и каким другим способом люди придумали дело с этим случаем.
Я должен сказать, что я думаю, что решения с использованием пользовательских классов/методов не являются элегантными, потому что люди, работающие с моим кодом, не обязательно знают, что они существуют.
Кроме того, если кто-нибудь знает, будет ли такой метод включен в JDK 9, и где я могу предложить такой метод? Это похоже на довольно вопиющее упущение API для меня.