微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 迭代器空集合

很常见的是,在不确定集合引用为空的情况下,必须先检查null,否则返回null.
样品:
Collection<Object> collection = ...
...
if(collection != null)//troublesome
    for(Object o : collection)

当然,我知道空集合比null好得多,但在某些情况下,客户端代码无法控制其他模块的可空值集合(例如,从第三方代码返回值).
所以我写了一个实用方法

public static <T> Iterable<T> nullableIterable(Iterable<T> it){
    return it != null ? it : Collections.<T>emptySet();
}

在客户端代码中,无需再检查null:

for(Object o : nullableIterable(collection))
...

你认为nullableIterable()是否合理?任何建议?有什么关系?谢谢!

解决方法

看起来不错.我个人也这样做.你会永远得到开发人员不同意这一点,因为它是一种防御性的程序设计.想象一下,你有一个工作流或一个不应该返回null的类.这意味着从它获取一个null是你的代码将隐藏的一个错误,因为它会将null变成一个空集合,并且该错误永远不会出现.

如果你是编写不支持null集合的API,那么你应该避免这种情况.如果客户端代码为您提供不支持的空集合,那么您应该抛出一个IllegalArgumentException,让客户端代码知道提供的集合有问题.就像是:

public void myApiNoSupportForNull(Collection<Object> collection){
   // Pre condition
   if(collection == null) 
     throw new IllegalArgumentException("This API does not support null collections!");
   //...
}

原文地址:https://www.jb51.cc/java/123921.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐