Как выполнить нулевую проверку для пустого необязательного - PullRequest
0 голосов
/ 03 сентября 2018

В настоящее время я работаю с некоторыми функциями репозитория, такими как .findById(). Теперь я хочу проверить, была ли возвращена запись для запрошенного идентификатора. В настоящее время я делаю это, выполняя null -проверку.

Optional<Entry> entryOptional = entryRepository.findById(id);

if (entryOptional != null) {
  // do sth. ...
}

Документация .findById() гласит, что функция будет ...

вернуть объект с указанным идентификатором или Optional#empty(), если ничего не найдено

Итак, моя текущая реализация с null-check работает как положено? Или я должен проверить что-то вроде:

if (!entryOptional.isEmpty()) {
  // do sth. ...
}

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Проверка, является ли опциональное значение нулевым или нет, по сути неверна.

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

По сути, необязательным является обертка для значения, для которого он может иметь два состояния. Либо иметь значение, либо быть пустым. Это делается с помощью Optional#isPresent. Подробнее об этом вы можете узнать в соответствующей документации здесь .

По сути, это следующее:

public boolean isPresent() {
    return value != null;
}

Хорошо реализованный метод (как и тот, который вы упомянули выше) вернет необязательный параметр со значением или пустой необязательный (как указано в документации).

Дополнительные функции предлагают большое количество методов, которыми вы можете воспользоваться без проверки пустоты.

Например, в своем коде вы могли бы:

entryRepository.findById(id).ifPresent(() -> {
   //some operation
});

Который в основном принимает потребителя и выполняет его в случае, если значение необязательного параметра не равно нулю.

В качестве альтернативы вы можете использовать функции отображения и т. Д.

Предлагаю вам ознакомиться с документацией для получения дополнительной информации.

0 голосов
/ 03 сентября 2018

Optional созданы для удаления null проверок в этом поле и выполнения операций с этим полем, не заботясь о том, чтобы оно было нулевым.

Вы можете проверить с помощью Optional.isPresent() в конце, содержит ли оно какое-либо значение.

Так что да, ваш второй подход верен.

0 голосов
/ 03 сентября 2018

Так что моя текущая реализация с нулевой проверкой работает как положено?

Нет. Как говорит метод, он возвращает сущность или Optional.empty; не возвращается null.

Ваша вторая версия верна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...