java對象判斷是否為空的工具類


import java.lang.reflect.Field;
import java.util.*;

/**
 * @author black_fire
 */
public class ObjectUtil {

    /**
     * 判斷一個對象是否為空 使用時調用此方法即可
     *
     * @param obj     要判斷的對象
     * @param strings 表當判斷自定義對象時可以傳入,其他類型傳入 Null 即可
     * @return 不為空 ture 空 false
     */
    public static Boolean isEmpty(Object obj, List<String> strings) {
        Boolean empty = false;
        if (obj != null) {
            empty = switchBoolean(getType(obj), obj, strings);
        }
        return empty;
    }


    /**
     * 獲取當前對象的類型
     *
     * @param object 要獲取類型的對象
     * @return 當前對象的類型
     */
    public static String getType(Object object) {
        String type = object.getClass().getName();
        int length = type.lastIndexOf(".");
        if (object instanceof Map) {
            return "Map";
        }
        if (object instanceof List) {
            return "List";
        }
        return type.substring(length + 1);
    }

    /**
     * 當前對象為 String 類型時, 判斷當前對象是否為 null 且 它是否為 "";
     *
     * @param obj String 類型的對象
     * @return 不為空  true 為空 false
     */
    public static Boolean strIsEmpty(Object obj) {
        return !"".equals(obj) && obj != null;
    }

    /**
     * 當已知當前對象為 map 類型,判斷當前 map 的長度不為0 且它本身不為空 時返回 true
     *
     * @param obj 已知當前對象是 map 類型
     * @return 為空 返回 false 不為空 返回 true
     */
    public static Boolean mapIsEmpty(Object obj) {
        Map<?, ?> map = (Map<?, ?>) obj;
        return map != null && map.size() != 0;
    }

    /**
     * 當已知當前對象為 list 類型,判斷當前 list 的長度不為 0 且它本身不為空時返回 true
     *
     * @param obj 已知當前對象是 map 類型
     * @return 為空 返回 false 不為空 返回 true
     */
    public static Boolean listIsEmpty(Object obj) {
        List<?> list = (List<?>) obj;
        return list != null && list.size() != 0;
    }

    /**
     * 判斷 integer 類型的數據是不是空.
     *
     * @param obj 要判斷的 Integer
     * @return 不為空就返回 true
     */
    public static Boolean integerIsEmpty(Object obj) {
        return obj != null;
    }

    /**
     * 當對象為自定義時,根據屬性來判斷當前對象是否為空
     *
     * @param obj     自定義對象
     * @param strings 當判斷自定義對象時可以傳入,其他類型傳入 Null 即可
     * @return 只要有一個屬性不為空 就返回 true 當所有屬性都為空時返回 false
     */
    public static Boolean customizeIsEmpty(Object obj, List<String> strings) {
        // 從該對象中獲取所有屬性
        Field[] fields = obj.getClass().getDeclaredFields();
        Map<String, Boolean> map = new HashMap<>(5);
        for (Field field : fields) {
            field.setAccessible(true);
            try {
                Object fieldObj = field.get(obj);
                map.put(field.getName(), isEmpty(fieldObj, strings));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return iteratorStrings(map, strings);
    }


    /**
     * 迭代獲取到的 Map 分兩種情況進行判斷,如果傳入的字符串默認需要某些屬性才為true需要傳入 List<String> 如果傳入 Null 那么默認當前對象有一個屬性就為 true
     *
     * @param map     迭代屬性獲取的map
     * @param strings 當判斷自定義對象時可以傳入,其他類型傳入 Null 即可
     * @return 返回當前對象是否為空.
     */
    public static Boolean iteratorStrings(Map<String, Boolean> map, List<String> strings) {
        List<Boolean> list = new ArrayList<>();
        if (listIsEmpty(strings)) {
            for (String str : strings) {
                list.add(map.get(str));
            }
            return !list.contains(false);
        } else {
            for (String key : map.keySet()) {
                list.add(map.get(key));
            }
            return list.contains(true);
        }
    }


    /**
     * 將 switch 判斷提取稱方法 方便多重使用
     *
     * @param type    當前判斷對象的類型,以 String 類型傳入
     * @param obj     要判斷的對象
     * @param strings 當判斷自定義對象時可以傳入,其他類型傳入 Null 即可.
     * @return 當對象不為空時 true  為空時 false
     */
    public static Boolean switchBoolean(String type, Object obj, List<String> strings) {
        switch (type) {
            case "String":
                return strIsEmpty(obj);
            case "Integer":
                return integerIsEmpty(obj);
            case "Map":
                return mapIsEmpty(obj);
            case "List":
                return listIsEmpty(obj);
            default:
                return customizeIsEmpty(obj, strings);
        }
    }
    
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM