java.util.List.isEmpty()检查列表本身是否为空?

时间:2012-07-16 20:30:13

标签: java list

java.util.List.isEmpty()会检查列表本身是null,还是我必须自己检查?

例如:

List<String> test = null;

if (!test.isEmpty()) {
    for (String o : test) {
        // do stuff here            
    }
}

这会引发NullPointerException,因为测试是null吗?

8 个答案:

答案 0 :(得分:103)

您尝试在isEmpty()引用(null)上调用List test = null; 方法。这肯定会抛出一个NullPointerException。您应该改为if(test!=null)(首先检查null)。

如果isEmpty()对象不包含任何元素,则方法ArrayList将返回true;否则为false(因为List必须首先实例化,在您的情况下是null)。

修改

您可能希望看到this问题。

答案 1 :(得分:97)

我建议使用Apache Commons Collections

http://commons.apache.org/proper/commons-collections/javadocs/api-release/org/apache/commons/collections4/CollectionUtils.html#isEmpty(java.util.Collection)

实现它非常好并且记录良好:

/**
 * 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;
}