Почему делает Iterables.find () в броске Гуавы NoSuchElementException, вместо того, чтобы возвратить пустой указатель?

Я люблю Google Guava и использую его много, но существует один метод, я всегда нахожу меня записью..

 public static  T tryFind(Iterable iterable, Predicate predicate){
     for(T t : iterable){
         if(predicate.apply(t)){
              return t;
         }
     }
     return null;
  }

Мне это, кажется, очень полезное дополнение к Iterables (также к Iterators в этом отношении), таким образом, я задаюсь вопросом, почему это отсутствует. Кроме того, в то время как я вижу точку наличия метода, который бросает NoSuchElementException, возможно, для различения нахождение пустого указателя и не нахождение элемента та ситуация только подходит, если предикат, который Вы используете,

public boolean apply(T t){
     return t==null;
}

который, кажется, не общий падеж.

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

Вот javadoc для [Iterables.find ()] [1]

[1]: http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html#find (java.lang. Повторяемый, com.google.common.base. Предикат)

17
задан Enno Shioji 23 June 2010 в 05:45
поделиться

4 ответа

Мы добавляем еще одну перегрузку find(), которая принимает значение по умолчанию.

32
ответ дан 30 November 2019 в 10:31
поделиться

Вероятно, потому что null является допустимым возвращаемым значением. Вообще говоря, если нет веских причин не поддерживать null, то его следует поддерживать. Если он поддерживается, то вы должны обработать случай, когда он существует.

13
ответ дан 30 November 2019 в 10:31
поделиться

Вместо tryFind() можно использовать filter и проверить, возвращает ли он пустую коллекцию.

Я обнаружил, что всегда работать с коллекциями чище, чем напрямую обращаться к объектам.

5
ответ дан 30 November 2019 в 10:31
поделиться

На мой взгляд, NoSuchElementException лучше, чем поздний и очень сложный для отладки NPE ... В большинстве случаев, когда вы ищете объект в «коллекции», вы знаете, что, вероятно, найдете его. Если объект, который вы ищете, отсутствует в «коллекции», вы столкнулись с исключительным случаем ... По моему мнению, обратная связь NoSuchElementException более явна, чем бессмысленное «null».

Значение по умолчанию, которое будет введено в будущем выпуске guava, будет эффективным сокращением для обработки исключительного случая.

3
ответ дан 30 November 2019 в 10:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: