簡體   English   中英

在 Java 中驗證 null 和空集合的最佳實踐

[英]Best practice to validate null and empty collection in Java

我想驗證一個集合是否為空和null 任何人都可以讓我知道最佳做法。

目前,我正在檢查如下:

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

如果您在項目中使用Apache Commons Collections庫,您可以使用CollectionUtils.isEmptyMapUtils.isEmpty()方法,它們分別檢查集合或地圖是否為(即它們是“空安全”)。

這些方法背后的代碼或多或少是用戶@icza 在他的回答中所寫的。

無論您做什么,請記住,您編寫的代碼越少,隨着代碼復雜性的降低,您需要測試的代碼就越少。

這是最好的檢查方法。 你可以寫一個輔助方法來做到這一點:

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

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

如果您使用 Spring 框架,那么您可以使用CollectionUtils來檢查集合(列表、數組)和映射等。

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

就我個人而言,我更喜歡使用空集合而不是null並且讓算法以這樣一種方式工作:對於算法來說,集合是否為空並不重要。

當您使用彈簧時,您可以使用

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

其中 obj 是任何 [map,collection,array,aything...]

否則:代碼是:

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

我們將檢查 Collection 對象是否為空,是否為空。 下面給出的所有這些方法都存在於 org.apache.commons.collections4.CollectionUtils 包中。

檢查列表或設置集合對象的類型。

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

檢查對象的地圖類型。

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

所有方法的返回類型都是布爾值。

如果您需要檢查空值,就是這樣。 但是,如果您對此有控制權,請盡可能返回空集合,然后僅檢查是否為空。

該線程與 C# 大致相同,但原則同樣適用於 java。 就像那里提到的那樣,只有在以下情況下才應返回 null

  • null 可能意味着更具體的東西;
  • 您的 API(合同)可能會強制您返回 null。

您可以使用org.apache.commons.lang.Validate的“ notEmpty ”方法:

Validate.notEmpty(myCollection) -> 驗證指定的參數集合既不是 null 也不是大小為零(無元素); 否則拋出異常。

對於包括地圖在內的所有集合,請使用這些集合對象上的isEmpty方法。 但是你必須先做一個空檢查:

Map<String, String> map;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM