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

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

例如:

 List test = null; if(!test.isEmpty()) { for(Object o : test) { // do stuff here } } 

这会抛出一个NullPointerException因为testing为null

您试图在null引用上调用isEmpty()方法(如List test = null; )。 这肯定会抛出一个NullPointerException 。 你应该这样做, if(test!=null)而不是(首先检查null )。

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

编辑:

你可能想看到这个问题。

我会推荐使用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()); } 

抛出NullPointerException – 任何尝试调用null引用的实例方法 – 但在这种情况下,你应该做一个明确的检查null

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

这比传播一个Exception更好,更清楚。

在任何空引用上调用任何方法总是会导致exception。 testing对象是否为空:

 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)) { // ... } 

是的,它会抛出一个exception 。 也许你习惯于PHP代码,其中empty($element)也检查isset($element) ? 在Java中,情况并非如此。

您可以很容易地记住,因为该方法直接在列表上调用(方法属于列表)。 所以如果没有列表,那么没有办法。 Java会抱怨没有列表来调用这个方法。

java.util.List.isEmpty()不检查列表是否为空。

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

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

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

除了狮子的答案我可以说,你最好使用if(CollectionUtils.isNotEmpty(test)){...}这也检查为空,所以不需要手动检查。

你也可以使用你自己的isEmpty(多重收集)方法。 添加这个你的Util类。

 public static boolean isEmpty(Collection... collections) { for (Collection collection : collections) { if (null == collection || collection.isEmpty()) return true; } return false; }