128

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

例如:

List<String> test = null;

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

这会抛出一个NullPointerException因为 test isnull吗?

4

8 回答 8

140

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

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

你可能想看看这个问题

于 2012-07-16T20:34:12.837 回答
127

我建议使用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());
}
于 2013-03-26T11:23:58.460 回答
20

引发NullPointerException- 任何尝试在引用上调用实例方法的尝试null- 但在这种情况下,您应该明确检查null

if ((test != null) && !test.isEmpty())

这比传播Exception.

于 2012-07-16T20:33:45.377 回答
19

不,java.util.List.isEmpty()不检查列表是否为null.

如果您使用的是Spring框架,则可以使用CollectionUtils该类来检查列表是否为空。它还负责null引用。以下是 Spring 框架CollectionUtils类的代码片段。

public static boolean isEmpty(Collection<?> collection) {
    return (collection == null || collection.isEmpty());
}

即使您不使用 Spring,您也可以继续调整此代码以添加到您的AppUtil类中。

于 2016-08-25T03:30:11.937 回答
8

在任何空引用上调用任何方法总是会导致异常。先测试对象是否为空:

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)) {
    // ...
}
于 2012-07-16T20:33:35.363 回答
3

是的,它会抛出一个 Exception。也许你习惯了PHP代码,那里empty($element)也检查isset($element). 在 Java 中,情况并非如此。

你可以很容易地记住这一点,因为该方法是直接在列表上调用的(该方法属于列表)。因此,如果没有列表,那么就没有方法。Java 会抱怨没有可以调用此方法的列表。

于 2012-07-16T20:33:43.607 回答
3

除了狮子的回答,我可以说你更好地使用if(CollectionUtils.isNotEmpty(test)){...}

这也会检查 null,因此不需要手动检查。

于 2015-07-06T09:09:27.597 回答
1

您也可以使用自己的 isEmpty (用于多个集合)方法。将此添加到您的 Util 类。

public static boolean isEmpty(Collection... collections) {
    for (Collection collection : collections) {
        if (null == collection || collection.isEmpty())
            return true;
    }
    return false;
}
于 2017-06-16T07:42:21.890 回答