首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Guava中的Iterables.find()抛出NoSuchElementException,而不是返回null?

为什么Guava中的Iterables.find()抛出NoSuchElementException,而不是返回null?
EN

Stack Overflow用户
提问于 2010-06-23 13:45:42
回答 5查看 8.4K关注 0票数 17

我喜欢Google Guava并经常使用它,但有一个方法我总是发现我在写。

代码语言:javascript
复制
 public static <T> T tryFind(Iterable<T> iterable, Predicate<T> predicate){
     for(T t : iterable){
         if(predicate.apply(t)){
              return t;
         }
     }
     return null;
  }

对我来说,这似乎是对Iterables (对Iterators也是如此)的一个非常有用的补充,所以我想知道为什么缺少它。此外,虽然我可以理解抛出NoSuchElementException的方法的意义,可能是为了区分查找null和找不到元素,但这种情况只有在您使用的谓词是

代码语言:javascript
复制
public boolean apply(T t){
     return t==null;
}

这似乎不是一个常见的情况。

那么为什么guava设计者选择使用这种行为,而不是在找不到的情况下只返回null呢?

下面是Iterables.find()的javadoc

1:http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html#find(java.lang.Iterable

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-06-23 14:13:54

我们正在添加另一个find()重载,它接受一个默认值。

票数 32
EN

Stack Overflow用户

发布于 2010-06-23 13:52:31

可能是因为null是一个有效的返回值。一般来说,除非有充分的理由不支持null,否则应该支持null。如果它被支持,那么你必须处理它存在的情况。

票数 13
EN

Stack Overflow用户

发布于 2010-06-23 14:03:08

您可以使用filter来代替tryFind(),并检查它是否返回一个空集合。

我发现总是使用集合比直接询问对象更干净。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3099188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档