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

本问题已经有最佳答案,请猛点这里访问。

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

例如:

List test = null;

if (!test.isEmpty()) {

for (String o : test) {

// do stuff here

}

}

这会抛出NullPointerException因为测试是null吗?

你可以自己回答:如果test == null应该/可以调用哪种方法?

空列表与空列表不同。

它不能。 NPE会在被调用之前被抛出。

这个("这会抛出NullPointerException因为测试为空吗?")实际上是一个非常错误的问题。 您可以通过一个非常简单的测试轻松测试这个问题。 问题本身当然需要考虑更深入地了解Java中的引用是如何工作的,为什么Java被设计为这是不可能的,但那时你应该有不同的提问。

您试图在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.

*

* 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());

}

尽管这个问题并不是特别聪明,但无论如何我还是想找到这样的答案。

Apache Utills绝对棒极了!最近我发现了SpringUtils.join - 在集合上非常有用。对不起有点offtop :)

这将抛出NullPointerException - 任何尝试在null引用上调用实例方法 - 但在这种情况下,您应该对null进行显式检查:

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

这比传播Exception要好得多,也更清晰。

对于List,我有时会使用:if(eList!= null&& eList.size()> 0)

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

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

public static boolean isEmpty(Collection< ? > collection) {

return (collection == null || collection.isEmpty());

}

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

在任何空引用上调用任何方法将始终导致异常。首先测试对象是否为null:

List test = null;

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

// ...

}

或者,编写一个方法来封装这个逻辑:

public static < T > boolean IsNullOrEmpty(Collection< T > list) {

return list == null || list.isEmpty();

}

然后你可以这样做:

List test = null;

if (!IsNullOrEmpty(test)) {

// ...

}

"java.util.List.isEmpty()检查列表本身是否为空?"对我来说似乎很清楚 - 他问的是列表的无效性,而不是它的内容。

是的,他完全把我弄糊涂了这么奇怪的问题。我的意思是,另一种方式也是愚蠢的,因为支票是if(!empty) then iterate ...但是在我看到你的答案之前我删除了我的愚蠢评论。也许他来自PHP,我们将!empty($foo)作为isset($foo) && $foo !=""的别名。

除了Lion的回答,我可以说你最好使用if(CollectionUtils.isNotEmpty(test)){...}

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

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

您可以轻松地记住它,因为该方法直接在列表中调用(该方法属于列表)。因此,如果没有列表,那么就没有方法。 Java会抱怨没有列表可以调用此方法。

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

public static boolean isEmpty(Collection... collections) {

for (Collection collection : collections) {

if (null == collection || collection.isEmpty())

return true;

}

return false;

}

也许你应该把它重命名为areEmpty()?我发现这些方法/功能更难使用,因为它们让一些东西漏掉了。此外,如果第一个Collection为空或空,其余的都不是,则会出现意外行为。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值