java.util.List.isEmpty()检查列表本身是否是 null,还是我必须自己做这个检查?
java.util.List.isEmpty()
null
例如:
List<String> test = null; if (!test.isEmpty()) { for (String o : test) { // do stuff here } }
这将抛出一个 NullPointerException,因为测试是 null?
NullPointerException
对任何空引用调用任何方法都会导致异常。首先测试对象是否为空:
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)) { // ... }
是的,它会 抛出一个异常。也许您已经习惯了 PHP代码,其中 empty($element)也检查 isset($element)。在 Java 中,情况并非如此。
empty($element)
isset($element)
您可以很容易地记住这一点,因为该方法是直接在列表中调用的(该方法属于列表)。因此,如果没有列表,那么就没有方法。Java 会抱怨没有列表来调用这个方法。
这个 威尔抛出一个 NullPointerException——任何试图调用 null引用的实例方法都会抛出一个 NullPointerException——但是在这种情况下,你应该对 null进行一个明确的检查:
if ((test != null) && !test.isEmpty())
这比传播 Exception要好得多,也更清楚。
Exception
您正在尝试对 null引用(作为 List test = null;)调用 isEmpty()方法。这肯定会抛出一个 NullPointerException。您应该改为 if(test!=null)(首先检查 null)。
List test = null;
isEmpty()
if(test!=null)
如果 ArrayList对象不包含任何元素,则 isEmpty()方法返回 true; 否则返回 false (对于这种情况,必须首先实例化 List,即 null)。
ArrayList
List
你可能想看看 这个问题。
我建议使用 Apache Commons集合:
Https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/collectionutils.html#isempty-java.util
它的执行情况相当好,并且有详细的文件记录:
/** * 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()); }
除了 狮子的回答,我可以说你更好地使用 if(CollectionUtils.isNotEmpty(test)){...}。
if(CollectionUtils.isNotEmpty(test)){...}
这也会检查 null,因此不需要手动检查。
不,java.util.List.isEmpty()不检查列表是否为 null。
如果您使用的是 春天框架,您可以使用 CollectionUtils类来检查列表是否为空。它还处理 null引用。下面是 Spring 框架的 CollectionUtils类的代码片段。
CollectionUtils
public static boolean isEmpty(Collection<?> collection) { return (collection == null || collection.isEmpty()); }
即使您没有使用 Spring,也可以继续调整此代码以添加到 AppUtil类中。
AppUtil
您也可以使用自己的 isEmpty (用于多个集合)方法。
public static boolean isEmpty(Collection... collections) { for (Collection collection : collections) { if (null == collection || collection.isEmpty()) return true; } return false; }