Замена проверки на ноль с Java 8 необязательно - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь заменить приведенный ниже блок кода на необязательный, просто хочу проверить, будут ли какие-либо негативные последствия от такой производительности, как производительность или что-то в этом роде?

Существующий код:

UserObj userObj=new UserObj();
Object result = fetchDetails();
if (null != result) {
    userObj.setResult(result.toString());
}

С Java 8 Optional:

UserObj userObj=new UserObj();
Optional.ofNullable(fetchDetails()).ifPresent(var -> userObj.setResult(var.toString()));

Это изменение делается только для того, чтобы код выглядел лаконично, так как в моем коде много пустых контрольных блоков.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Прежде всего, я думаю, что вы неправильно понимаете цель 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 */);
0 голосов
/ 29 января 2019

Возвращение Optional из fetchDetails() имеет больше смысла здесь.тогда вы можете напрямую проверить ifPresent и затем продолжить

...