Предоставление пустого списка необязательному? - PullRequest
2 голосов
/ 16 марта 2020

Предположим, у меня есть этот макет:

public void caller(@NonNull List<Integer> param){
  // param COULD BE EMPTY, but it CANNOT be NULL, its not nullable
  if(!param.isEmpty()) function(Optional.of(param));
  // If param is empty then just dont call "function"
}


public void function(Optional<List<Integer>> someParam){
  someParam.ifPresent(...);
}

Вот вопрос: не создается ли Optional на основе правильного использования пустого списка? У меня возникает путаница в том, должны ли мы предоставлять Дополнительный продукт независимо от того, является ли param в caller пустым или нет, потому что он не нулевой, но мне интересно, является ли это правильным использованием?

1 Ответ

2 голосов
/ 16 марта 2020
  1. someParam.ifPresent(...); тело ifPresent всегда вызывается, потому что всегда есть элемент, даже если это пустой список (вы проверяете нулевое значение @NonNull List<Integer> param).
  2. Вы используете Optional.of вместо Optional.ofNullable, поэтому всегда будет ненулевой элемент.
  3. Упаковка списка в Optional не имеет особого смысла, почему бы не пропустить пустой список и не обрабатывать какие-либо элементы?
  4. if(!param.isEmpty()) является избыточным, потому что вы знаете, что в списке есть элементы, как указано в 3. Почему бы не передать список для обработки?

tl; dr : вы смешиваете пустой список с null, перенос любой коллекции в Optional не имеет особого смысла.

...