java.util.List.isEmpty()
会检查列表本身是null
,还是我必须自己检查?
例如:
List<String> test = null;
if (!test.isEmpty()) {
for (String o : test) {
// do stuff here
}
}
这会引发NullPointerException
,因为测试是null
吗?
答案 0 :(得分:103)
您尝试在isEmpty()
引用(null
)上调用List test = null;
方法。这肯定会抛出一个NullPointerException
。您应该改为if(test!=null)
(首先检查null
)。
如果isEmpty()
对象不包含任何元素,则方法ArrayList
将返回true;否则为false(因为List
必须首先实例化,在您的情况下是null
)。
修改强>
您可能希望看到this问题。
答案 1 :(得分:97)
我建议使用Apache Commons Collections
实现它非常好并且记录良好:
/**
* Null-safe check if the specified collection is empty.
* <p>
* Null returns true.
*
* @param coll the collection to check, may be null
* @return true if empty or null
* @since Commons Collections 3.2
*/
public static boolean isEmpty(Collection coll) {
return (coll == null || coll.isEmpty());
}
答案 2 :(得分:14)
这个将抛出一个NullPointerException
- 就像在null
引用上调用实例方法的任何尝试一样 - 但是在这种情况下你应该对它进行明确的检查null
:
if ((test != null) && !test.isEmpty())
这比传播Exception
更好,更清晰。
答案 3 :(得分:7)
否 java.util.List.isEmpty()
不检查列表是否为null
。
如果您使用的是Spring框架,则可以使用CollectionUtils
类来检查列表是否为空。它还负责null
引用。以下是Spring framework&#39; CollectionUtils
类的代码片段。
public static boolean isEmpty(Collection<?> collection) {
return (collection == null || collection.isEmpty());
}
即使您没有使用Spring,也可以继续调整此代码以添加到AppUtil
课程中。
答案 4 :(得分:6)
对任何空引用调用任何方法都将导致异常。首先测试对象是否为null:
List<Object> test = null;
if (test != null && !test.isEmpty()) {
// ...
}
或者,编写一个方法来封装这个逻辑:
public static <T> boolean IsNullOrEmpty(Collection<T> list) {
return list == null || list.isEmpty();
}
然后你可以这样做:
List<Object> test = null;
if (!IsNullOrEmpty(test)) {
// ...
}
答案 5 :(得分:3)
是的,它会抛出异常。也许你习惯于 PHP 代码,其中empty($element)
也检查isset($element)
?在Java中,情况并非如此。
您可以轻松记住,因为该方法直接在列表中调用(该方法属于列表)。因此,如果没有列表,那么就没有方法。 Java会抱怨没有列表可以调用此方法。
答案 6 :(得分:3)
除了Lion的回答,我可以说你最好使用if(CollectionUtils.isNotEmpty(test)){...}
这也检查null,因此不需要手动检查。
答案 7 :(得分:1)
您也可以使用自己的isEmpty(用于多个集合)方法。添加你的Util类。
public static boolean isEmpty(Collection... collections) {
for (Collection collection : collections) {
if (null == collection || collection.isEmpty())
return true;
}
return false;
}