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
它实现它相当好,有据可查:
/** * 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; }