Java 在迭代之前调用isEmpty()是否多余?
给定Java 在迭代之前调用isEmpty()是否多余?,java,Java,给定集合foo,我通常在迭代它之前进行此检查: if (foo != null && !foo.isEmpty()) { for (Object f : foo) { // ... } } 我只是想知道,这被认为是最佳实践吗?isEmpty()检查是否应该是多余的,因为for()只会忽略一个空集合而不会抛出错误 检查null是否必要,或者是否有办法使for()忽略null集合?(无需尝试捕捉for循环)关于
集合foo
,我通常在迭代它之前进行此检查:
if (foo != null && !foo.isEmpty()) {
for (Object f : foo) {
// ...
}
}
我只是想知道,这被认为是最佳实践吗?isEmpty()
检查是否应该是多余的,因为for()
只会忽略一个空集合而不会抛出错误
检查
null
是否必要,或者是否有办法使for()
忽略null
集合?(无需尝试捕捉for循环)关于对的调用,isEmpty
我可以向您保证这是多余的。您甚至可能希望检查Joshua的有效Java 2nd,并重新查看从for each循环转换而来的代码。关于调用isEmpty,我可以向您保证这是多余的。您甚至可能想检查Joshua有效的Java2nd,并重新查看从for-each循环转换而来的代码
isEmpty()检查是否应该是多余的,因为for()只会忽略一个空集合而不会抛出错误
它是多余的,在空集合上使用增强的for
是完全无害的。请注意,这样做确实会创建一个迭代器对象,因此该检查可能会提供一些非常较小的内存波动保护,但通常如果值得的话,您会有更大的问题需要解决
空检查是必要的还是有办法使for()忽略空集合?(不尝试捕捉for循环)
您需要进行null
检查,除非您要捕获NPE(您说您不想这样做),或者您要允许该NPE传播到调用方(例如,因为foo
在逻辑上不应该是null
,或者类似)
isEmpty()检查是否应该是多余的,因为for()只会忽略一个空集合而不会抛出错误
它是多余的,在空集合上使用增强的for
是完全无害的。请注意,这样做确实会创建一个迭代器对象,因此该检查可能会提供一些非常较小的内存波动保护,但通常如果值得的话,您会有更大的问题需要解决
空检查是必要的还是有办法使for()忽略空集合?(不尝试捕捉for循环)
您需要进行null
检查,除非您要捕获NPE(您说您不想这样做),或者您要允许该NPE传播到调用方(例如,因为foo
在该点上在逻辑上不应为null
,或者类似)。是的,是的
只有福!=如果在代码的该点可以为null,则可能需要null。是的,它是
只有福!=如果在代码的那个点上可以为null,则可能需要null。我最近遇到的最佳实践之一是使用CollectionUtils
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(collectionName)) {
//Iterate through collectionName
}
ApacheCommons的CollectionUtils.isNotEmpty(Collection)是一个空安全检查
如果集合/列表不为空,则返回TRUE;如果集合为null,则NOTNULL返回FALSE
以以下为例:
List<String> properties = new ArrayList();
if (CollectionUtils.isNotEmpty(properties)) {
// process the list
} else {
// list is null or empty
}
List properties=new ArrayList();
if(CollectionUtils.isNotEmpty(属性)){
//处理列表
}否则{
//列表为null或空
}
jar required:commons.collections.xxx.jar我最近遇到的最佳实践之一是使用CollectionUtils
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(collectionName)) {
//Iterate through collectionName
}
ApacheCommons的CollectionUtils.isNotEmpty(Collection)是一个空安全检查
如果集合/列表不为空,则返回TRUE;如果集合为null,则NOTNULL返回FALSE
以以下为例:
List<String> properties = new ArrayList();
if (CollectionUtils.isNotEmpty(properties)) {
// process the list
} else {
// list is null or empty
}
List properties=new ArrayList();
if(CollectionUtils.isNotEmpty(属性)){
//处理列表
}否则{
//列表为null或空
}
需要jar:commons.collections.xxx.jar
在.isEmpty条件下,我看不出有任何用处,它只是给代码添加了噪音,使代码的实际功能更难阅读和识别 空检查是必要的还是有办法使for()忽略空集合?(不尝试捕捉for循环)
对于每个循环,您应该在执行之前始终检查null。这是您应该考虑的唯一解决方案,因为捕获NPE(通常是运行时异常)是。运行时异常表示在设计时没有预料到的情况,这通常意味着编程错误。所以缓存这些异常可以隐藏代码中真正的bug。例如,如果使用try catching NullPointerException围绕For each,您如何知道异常是因为集合为null而不是因为循环中的代码而发生的。我看不到.isEmpty条件有任何用处,它只是给代码增加了噪音,使代码的实际功能更难阅读和识别
visibleTiles.isEmpty()
空检查是必要的还是有办法使for()忽略空集合?(不尝试捕捉for循环)
对于每个循环,您应该在执行之前始终检查null。这是您应该考虑的唯一解决方案,因为捕获NPE(通常是运行时异常)是。运行时异常表示在设计时没有预料到的情况,这通常意味着编程错误。所以缓存这些异常可以隐藏代码中真正的bug。因为我