gpt4 book ai didi

java - 迭代器空集合

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:59:29 24 4
gpt4 key购买 nike

当不确定集合引用是否为 null 时,我必须在迭代之前检查 null 是很常见的。示例:

Collection<Object> collection = ...
...
if(collection != null)//troublesome
for(Object o : collection)

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

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

在客户端代码中,不再需要检查空值:

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

你觉得nullableIterable()合理吗?有什么建议吗?有什么顾虑吗?谢谢!

最佳答案

看起来不错。我个人也是这样做的。你总会遇到不同意这一点的开发人员,因为这是一种防御性编程。假设您有一个不应返回 null 的工作流或类。这意味着从中获取 null 是一个错误,您的代码将隐藏该错误,因为它会将 null 转换为空集合,并且该错误永远不会浮出水面。

例如,如果您正在编写不支持 null 集合的 API,那么您应该避免这种情况。如果客户端代码为您提供了一个您不支持的 null 集合,您应该抛出一个 IllegalArgumentException 以让客户端代码知道所提供的集合有问题。像这样的东西:

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

关于java - 迭代器空集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11373537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com