在Java中验证null和空集合的最佳实践

时间:2012-10-04 05:54:22

标签: java collections

我想验证集合是否为空且null。谁能告诉我最好的做法。

目前,我正在检查如下:

if (null == sampleMap || sampleMap.isEmpty()) {
  // do something
} 
else {
  // do something else
}

9 个答案:

答案 0 :(得分:240)

如果您在项目中使用Apache Commons Collections库,则可以使用CollectionUtils.isEmptyMapUtils.isEmpty()方法分别检查集合或地图是否为为空 null (即它们是“无效的”)。

这些方法背后的代码或多或少是用户@icza在他的回答中写的。

无论您做什么,请记住,您编写的代码越少,您需要测试的代码越少,因为代码的复杂性会降低。

答案 1 :(得分:59)

这是检查它的最佳方法。您可以编写辅助方法来执行此操作:

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

public static boolean isNullOrEmpty( final Map< ?, ? > m ) {
    return m == null || m.isEmpty();
}

答案 2 :(得分:21)

如果您使用Spring框架,那么您可以使用NULL来检查集合(列表,数组)和地图等。

CollectionUtils

答案 3 :(得分:17)

就个人而言,我更喜欢使用空集合而不是null,并且算法的工作方式对于算法来说,如果集合是空的,则无关紧要。

答案 4 :(得分:4)

当你使用spring时,你可以使用

boolean isNullOrEmpty = org.springframework.util.ObjectUtils.isEmpty(obj);

其中obj是[map,collection,array,aythink ...]

否则:代码是:

public static boolean isEmpty(Object[] array) {
    return (array == null || array.length == 0);
}

public static boolean isEmpty(Object obj) {
    if (obj == null) {
        return true;
    }

    if (obj.getClass().isArray()) {
        return Array.getLength(obj) == 0;
    }
    if (obj instanceof CharSequence) {
        return ((CharSequence) obj).length() == 0;
    }
    if (obj instanceof Collection) {
        return ((Collection) obj).isEmpty();
    }
    if (obj instanceof Map) {
        return ((Map) obj).isEmpty();
    }

    // else
    return false;
}

for String best is:

boolean isNullOrEmpty = (str==null || str.trim().isEmpty());

答案 5 :(得分:3)

我们将检查Collection对象为空,是否为null。 org.apache.commons.collections4.CollectionUtils软件包中提供了下面提供的所有这些方法。

检查列表或设置收集对象的类型。

 <Import Project="$(ProjectDir)newtool\MSBuild.Community.Tasks.Targets" />

检查对象的地图类型。

CollectionUtils.isEmpty(listObject);
CollectionUtils.isNotEmpty(listObject);

所有方法的返回类型均为布尔值。

答案 6 :(得分:2)

如果你需要检查null,那就是这样。但是,如果您对此有控制权,则只需返回空集合,并在以后仅检查为空。

This thread与C#大致相同,但原则同样适用于java。就像那里提到的那样,只有在

时才应该返回null
  
      
  • null可能意味着更具体的内容;
  •   
  • 您的API(合约)可能会强制您返回null。
  •   

答案 7 :(得分:2)

您可以使用org.apache.commons.lang.Validate&#34; notEmpty&#34;方法:

Validate.notEmpty(myCollection) - &gt;验证指定的参数集合既不是null也不是大小为零(没有元素);否则抛出异常。

答案 8 :(得分:-2)

对于所有集合包含映射使用:isEmpty方法,它位于这些集合对象上。但是你必须在

之前做一个nulkl检查

地图;

........ if(map!= null&amp;&amp;!map.isEmpty()) ......