是否java.util.List.isEmpty()
检查列表本身是否是null
,还是我必须自己检查?
例如:
List<String> test = null;
if (!test.isEmpty()) {
for (String o : test) {
// do stuff here
}
}
这会抛出一个NullPointerException
因为 test isnull
吗?
您正在尝试isEmpty()
在引用上调用该方法null
(as List test = null;
)。这肯定会抛出一个NullPointerException
. 你应该这样做if(test!=null)
(首先检查null
)。
如果对象不包含任何元素,则该方法isEmpty()
返回 true ;ArrayList
否则为 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
.
不,java.util.List.isEmpty()
不检查列表是否为null
.
如果您使用的是Spring框架,则可以使用CollectionUtils
该类来检查列表是否为空。它还负责null
引用。以下是 Spring 框架CollectionUtils
类的代码片段。
public static boolean isEmpty(Collection<?> collection) {
return (collection == null || collection.isEmpty());
}
即使您不使用 Spring,您也可以继续调整此代码以添加到您的AppUtil
类中。
在任何空引用上调用任何方法总是会导致异常。先测试对象是否为空:
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 会抱怨没有可以调用此方法的列表。
除了狮子的回答,我可以说你更好地使用if(CollectionUtils.isNotEmpty(test)){...}
。
这也会检查 null,因此不需要手动检查。
您也可以使用自己的 isEmpty (用于多个集合)方法。将此添加到您的 Util 类。
public static boolean isEmpty(Collection... collections) {
for (Collection collection : collections) {
if (null == collection || collection.isEmpty())
return true;
}
return false;
}