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

tktrz96b  于 2023-02-02  发布在  Java
关注(0)|答案(9)|浏览(208)

我想验证一个集合是否为空和null。有人能告诉我最佳实践吗?
目前,我正在检查以下内容:

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

ki1q1bka1#

如果您在项目中使用Apache Commons Collections库,您可以使用CollectionUtils.isEmpty(...)MapUtils.isEmpty(...)方法,它们分别检查集合或Map是否为 emptynull(即它们是“null安全的”)。
这些方法背后的代码或多或少是user @icza在他的答案中所写的。
无论您做什么,请记住,随着代码复杂性的降低,您编写的代码越少,需要测试的代码就越少。

332nm8kg

332nm8kg2#

这是检查它的最好方法,你可以写一个helper方法来做这件事:

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

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

iszxjhcz3#

如果你使用Spring框架,那么你可以使用CollectionUtils来检查集合(列表,数组)和Map等等。

if(CollectionUtils.isEmpty(...)) {...}
yqkkidmi

yqkkidmi4#

当你用Spring时你可以用

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

其中obj是任意[Map、集合、数组、任意事物...]
否则:代码为:

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;
}

字符串的最佳值为:

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

6tqwzwtp5#

就我个人而言,我更喜欢使用空集合而不是null,并且让算法以这样一种方式工作:对于算法来说,集合是否为空并不重要。

ttygqcqt

ttygqcqt6#

我们将检查一个集合对象是否为空,null或not。下面给出的所有方法都存在于org.apache.commons.collections4.CollectionUtils包中。
选中列表或设置集合对象的类型。

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

选中对象的贴图类型。

MapUtils.isEmpty(mapObject);
MapUtils.isNotEmpty(mapObject);

所有方法的返回类型都是boolean。

yzuktlbb

yzuktlbb7#

您可以使用org.apache.commons.lang.Validate的“notEmpty”方法:
Validate.notEmpty(myCollection)-〉验证指定的参数集合既不为空也不为零(没有元素);否则抛出异常。

flmtquvp

flmtquvp8#

如果你需要检查空值,那就是方法,但是,如果你对此有控制权,只要你能,就返回空集合,以后只检查空值。
This thread与C#的情况大致相同,但其原理同样适用于java。

  • null可能意味着更具体的东西;
  • 您的API(合约)可能会强制您返回null。
8xiog9wr

8xiog9wr9#

对于包括Map使用在内的所有集合:isEmpty方法,在这些集合对象上,但是你必须在之前做一个null检查:

Map<String, String> map;

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

相关问题