最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java判斷對象是否為空的四種方法小結(jié)

 更新時間:2024年10月16日 09:48:30   作者:初學(xué)者杰克  
這篇文章主要介紹了Java判斷對象是否為空的四種方法,判斷對象是否為空有多種方法,包括使用==或!=運(yùn)算符直接比較對象與null,使用Objects.isNull()方法,以及用instanceof運(yùn)算符或Optional類進(jìn)行更安全的空值處理,需要的朋友可以參考下

在 Java 中,判斷對象是否為空可以使用以下幾種方法:

1、使用 == 或 != 運(yùn)算符比較對象引用與 null。例如:

if (myObject == null) {
    // myObject 為空
} else {
    // myObject 不為空
}

2、使用 Objects.isNull() 方法。這個方法的優(yōu)點是可以處理 null 參數(shù)的情況,不會拋出 NullPointerException。例如:

if (Objects.isNull(myObject)) {
    // myObject 為空
} else {
    // myObject 不為空
}

3、使用對象的 instanceof 運(yùn)算符。這種方法可以檢查對象是否為特定的類型。例如:

if (myObject instanceof MyClass) {
    // myObject 不為空,并且是 MyClass 類型
} else {
    // myObject 為空或不是 MyClass 類型
}

4、使用 Optional 類。這是 Java 8 引入的一個功能強(qiáng)大的工具類,可以優(yōu)雅地處理空值。例如:

Optional<MyClass> myOptional = Optional.ofNullable(myObject);
if (myOptional.isPresent()) {
    // myObject 不為空
    MyClass myInstance = myOptional.get();
} else {
    // myObject 為空
}

總的來說,選擇哪種方法主要取決于具體的需求和編碼習(xí)慣。需要注意的是,直接使用 == 或 != 運(yùn)算符比較對象引用與 null 是最簡單直接的方法,但可能會在某些情況下拋出 NullPointerException。使用 Objects.isNull() 和 Optional 類可以更安全地處理空值情況。

附:判斷某個對象屬性值都不為空/至少有一個屬性值不為空

如果是字符串屬性則不為null和不為""

有時候,controller參數(shù)接收json對象,我們需要判斷該對象中的屬性值是否都不為空(都是必須的)/至少有一個屬性值不為空,其中字符串屬性不為null和不為“”,如果對象參數(shù)多,controller里面遍歷每一個屬性去判斷,代碼冗余。

當(dāng)然還有另外的方法,比如spring框架中的注解@NotNull,@NotBlank,@Valid。

import org.springframework.util.StringUtils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * Title:判斷某個對象屬性值都不為空,字符串屬性不為空和不為空字符串
 * Description:利用類的反射獲取,前提是javabean中的屬性都是包裝類
 * @author WZQ
 * @version 1.0.0
 * @date 2020/4/19
 */
public class ObjIsUtil {

    /**
     * 根據(jù)屬性名獲取屬性值
     */
    private static Object getFieldValueByName(String fieldName, Object o) {
        try {
            String firstLetter = fieldName.substring(0, 1).toUpperCase();
            String getter = "get" + firstLetter + fieldName.substring(1);
            Method method = o.getClass().getMethod(getter, new Class[]{});
            Object value = method.invoke(o, new Object[]{});
            return value;
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 判斷對象中的屬性值是否都不為空,字符串屬性的需要判斷空字符串
     */
    public static Boolean isAllNotNull(Object o) {
        //獲取對象的屬性數(shù)組,反射
        Field[] fields = o.getClass().getDeclaredFields();
        String name = "";
        for (int i = 0; i < fields.length; i++) {
            //屬性名
            name = fields[i].getName();

            //pojos和dto含有serialVersionUID,得去掉該字段的判斷
            if (name.equals("serialVersionUID"))
                continue;

            //當(dāng)前屬性名的值
            Object fieldValueByName = getFieldValueByName(name, o);

            //值為null
            if (fieldValueByName == null)
                return false;

            //如果是String,判斷空字符串""
            if (fields[i].getType().equals(String.class)){
                String s = (String) fieldValueByName;
                if (StringUtils.isEmpty(s)){
                    return false;
                }
            }

        }
        return true;
    }

    /**
     * 判斷對象中的屬性值至少有一個不為空
     */
    public static Boolean oneNotNull(Object o) {
        //獲取對象的屬性數(shù)組,反射
        Field[] fields = o.getClass().getDeclaredFields();
        String name = "";
        for (int i = 0; i < fields.length; i++) {
            //屬性名
            name = fields[i].getName();

            //當(dāng)前屬性名的值
            Object fieldValueByName = getFieldValueByName(name, o);

            //如果是String,判斷空字符串""
            if (fields[i].getType().equals(String.class)){
                String s = (String) fieldValueByName;
                if (!StringUtils.isEmpty(s)){
                    return true;
                }
            }else{
                //值為null
                if (fieldValueByName != null)
                    return true;
            }

        }
        return false;
    }

//    public static void main(String[] args) {
//        Usertest usertest = new Usertest("1","name",1);
//        Usertest usertest1 = new Usertest("","",null);
//        Usertest usertest2 = new Usertest("1","",null);
//        Usertest usertest3 = new Usertest("1",null,1);
//        System.out.println(isAllNotNull(usertest));//true
//        System.out.println(isAllNotNull(usertest1));//false
//        System.out.println(isAllNotNull(usertest2));//false
//        System.out.println(isAllNotNull(usertest3));//false
//        System.out.println(oneNotNull(usertest));//true
//        System.out.println(oneNotNull(usertest1));//false
//    }

}

總結(jié)

到此這篇關(guān)于Java判斷對象是否為空的四種方法的文章就介紹到這了,更多相關(guān)Java判斷對象是否為空內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java接口RandomAccess全面了解

    Java接口RandomAccess全面了解

    下面小編就為大家?guī)硪黄狫ava接口RandomAccess全面了解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • SpringBoot整合jasypt實現(xiàn)數(shù)據(jù)加密的步驟

    SpringBoot整合jasypt實現(xiàn)數(shù)據(jù)加密的步驟

    聽說過jasypt嗎?它可是一個超級流行的Java庫哦,提供了簡單又高效的加密和解密接口,整合jasypt后,我們的SpringBoot應(yīng)用就能輕松處理敏感數(shù)據(jù)的加密和解密,而不必為復(fù)雜的加密算法頭疼啦,下面給大家介紹SpringBoot整合jasypt實現(xiàn)數(shù)據(jù)加密的步驟,感興趣的朋友一起看看吧
    2025-04-04
  • Java?Stream中map與flatMap對比超詳細(xì)教程

    Java?Stream中map與flatMap對比超詳細(xì)教程

    這篇文章主要介紹了Java?Stream中map與flatMap對比的相關(guān)資料,map()用于一對一轉(zhuǎn)換,而flatMap()用于一對多轉(zhuǎn)換并合并結(jié)果,文章詳細(xì)解釋了每個方法的基本功能、典型應(yīng)用場景和示例代碼,需要的朋友可以參考下
    2025-05-05
  • Springboot以Repository方式整合Redis的方法

    Springboot以Repository方式整合Redis的方法

    這篇文章主要介紹了Springboot以Repository方式整合Redis的方法,本文通過圖文并茂實例詳解給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • java線程中start和run的區(qū)別詳解

    java線程中start和run的區(qū)別詳解

    這篇文章主要介紹了java線程中start和run的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • SSH框架網(wǎng)上商城項目第7戰(zhàn)之整合Struts2和Json

    SSH框架網(wǎng)上商城項目第7戰(zhàn)之整合Struts2和Json

    SSH框架網(wǎng)上商城項目第7戰(zhàn)之整合Struts2和Json,打通EasyUI和Struts2之間的交互,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Java多線程并發(fā)執(zhí)行demo代碼實例

    Java多線程并發(fā)執(zhí)行demo代碼實例

    這篇文章主要介紹了Java多線程并發(fā)執(zhí)行demo代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Java真題實練掌握哈希表的使用

    Java真題實練掌握哈希表的使用

    哈希表是一種根據(jù)關(guān)鍵碼去尋找值的數(shù)據(jù)映射結(jié)構(gòu),該結(jié)構(gòu)通過把關(guān)鍵碼映射的位置去尋找存放值的地方,說起來可能感覺有點復(fù)雜,我想我舉個例子你就會明白了,最典型的的例子就是字典
    2022-07-07
  • Java中鎖的全面解析之類型、使用場景、優(yōu)缺點及實現(xiàn)方式(示例代碼)

    Java中鎖的全面解析之類型、使用場景、優(yōu)缺點及實現(xiàn)方式(示例代碼)

    本文將從鎖的基本概念出發(fā),詳細(xì)講解Java中常見的鎖類型、它們的使用場景、優(yōu)缺點以及底層實現(xiàn)原理,并通過代碼示例幫助讀者深入理解,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • Java分布式鎖理論(redis、zookeeper))案例詳解

    Java分布式鎖理論(redis、zookeeper))案例詳解

    zookeeper有個節(jié)點路徑的概念,節(jié)點路徑不能重復(fù),保證了唯一性,這篇文章給大家介紹Java分布式鎖理論(redis、zookeeper)?案例詳解,感興趣的朋友跟隨小編一起看看吧
    2024-01-01

最新評論

会昌县| 叶城县| 大庆市| 晋州市| 北辰区| 无极县| 贵溪市| 岚皋县| 镇巴县| 阜新市| 新沂市| 彭泽县| 亚东县| 津市市| 康定县| 大城县| 丰原市| 垦利县| 台北县| 内江市| 卢龙县| 敖汉旗| 蒲江县| 九寨沟县| 乌鲁木齐市| 肃宁县| 包头市| 津市市| 白玉县| 五指山市| 古田县| 普宁市| 库尔勒市| 建瓯市| 周至县| 曲周县| 怀来县| 昂仁县| 湖南省| 江门市| 遂溪县|