Прежде всего, я думаю, что вы неправильно понимаете цель Optional
.Это не просто для замены
if(obj != null){ ... }
. Суть Optional
заключается в том, чтобы предоставить функции для функции, возвращающей значение, для указания отсутствия возвращаемого значения.Пожалуйста, прочитайте этот пост для более подробной информации.
Правильное использование Optional
в вашем случае будет возвращать необязательный ResultObj
из fetchDetails
метод:
Optional<ResultObj> fetchDetails() {
...
}
Затем вы просто объединяете методы при извлечении Optional
, как и раньше.
Обновление
В случае, если вы не можете изменить fetchDetails
, есть еще опцияоборачивая его в ваш собственный метод, как показано ниже:
Optional<ResultObj> fetchOptionalDetails() {
return Optional.ofNullable(fetchDefails());
}
Создание нового метода добавит крошечные накладные расходы, но код будет гораздо более читабельным:
fetchOptionalDetails().ifPresent(details -> /* do something */);