欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

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

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

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

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

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

附:判斷某個(gè)對(duì)象屬性值都不為空/至少有一個(gè)屬性值不為空

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

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

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

import org.springframework.util.StringUtils;

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

/**
 * Title:判斷某個(gè)對(duì)象屬性值都不為空,字符串屬性不為空和不為空字符串
 * 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;
        }
    }

    /**
     * 判斷對(duì)象中的屬性值是否都不為空,字符串屬性的需要判斷空字符串
     */
    public static Boolean isAllNotNull(Object o) {
        //獲取對(duì)象的屬性數(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;
    }

    /**
     * 判斷對(duì)象中的屬性值至少有一個(gè)不為空
     */
    public static Boolean oneNotNull(Object o) {
        //獲取對(duì)象的屬性數(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判斷對(duì)象是否為空的四種方法的文章就介紹到這了,更多相關(guān)Java判斷對(duì)象是否為空內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • RabbitMQ消息確認(rèn)機(jī)制剖析

    RabbitMQ消息確認(rèn)機(jī)制剖析

    這篇文章主要為大家介紹了RabbitMQ消息確認(rèn)機(jī)制剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • java8新特性之方法引用示例代碼

    java8新特性之方法引用示例代碼

    這篇文章主要給大家介紹了關(guān)于java8新特性之方法引用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • SpringCloud微服務(wù)續(xù)約實(shí)現(xiàn)源碼分析詳解

    SpringCloud微服務(wù)續(xù)約實(shí)現(xiàn)源碼分析詳解

    這篇文章主要介紹了SpringCloud微服務(wù)續(xù)約實(shí)現(xiàn)源碼分析,服務(wù)續(xù)期和服務(wù)注冊(cè)非常相似,服務(wù)注冊(cè)在Eureka?Client程序啟動(dòng)之后開(kāi)啟,并同時(shí)開(kāi)啟服務(wù)續(xù)期的定時(shí)任務(wù)
    2022-11-11
  • Java大數(shù)運(yùn)算BigInteger與進(jìn)制轉(zhuǎn)換詳解

    Java大數(shù)運(yùn)算BigInteger與進(jìn)制轉(zhuǎn)換詳解

    這篇文章主要介紹了Java大數(shù)運(yùn)算BigInteger與進(jìn)制轉(zhuǎn)換詳解,Java 提供了 BigInteger(大整數(shù))類和 BigDecimal(大浮點(diǎn)數(shù))類用于大數(shù)運(yùn)算,這兩個(gè)類都繼承自 Number 類(抽象類),由于 BigInteger 在大數(shù)運(yùn)算中更常見(jiàn),需要的朋友可以參考下
    2023-09-09
  • Java中面向?qū)ο蟮闹R(shí)點(diǎn)總結(jié)

    Java中面向?qū)ο蟮闹R(shí)點(diǎn)總結(jié)

    Java是一門面向?qū)ο蟮恼Z(yǔ)言。對(duì)象是Java程序中的基本實(shí)體。除了對(duì)象之外Java程序同樣處理基本數(shù)據(jù)。下面這篇文章主要給大家總結(jié)了關(guān)于Java中面向?qū)ο蟮闹R(shí)點(diǎn),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-02-02
  • java對(duì)象轉(zhuǎn)成byte數(shù)組的3種方法

    java對(duì)象轉(zhuǎn)成byte數(shù)組的3種方法

    這篇文章主要為大家詳細(xì)介紹了java對(duì)象轉(zhuǎn)成byte數(shù)組的3種方法,具有一定的參考價(jià)值,感興趣的朋友可以參考一下
    2018-06-06
  • Spring中@PropertySource和@Value注解詳解

    Spring中@PropertySource和@Value注解詳解

    這篇文章主要介紹了Spring中@PropertySource和@Value注解詳解,@PropertySource注解可以方便和靈活的向Spring的環(huán)境容器(org.springframework.core.env.Environment Environment)中注入一些屬性,這些屬性可以在Bean中使用,需要的朋友可以參考下
    2023-11-11
  • JavaWeb實(shí)現(xiàn)自動(dòng)登錄功能

    JavaWeb實(shí)現(xiàn)自動(dòng)登錄功能

    這篇文章主要為大家詳細(xì)介紹了JavaWeb實(shí)現(xiàn)自動(dòng)登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Spring Security 實(shí)現(xiàn)多種登錄方式(常規(guī)方式外的郵件、手機(jī)驗(yàn)證碼登錄)

    Spring Security 實(shí)現(xiàn)多種登錄方式(常規(guī)方式外的郵件、手機(jī)驗(yàn)證碼登錄)

    本文主要介紹了Spring Security 實(shí)現(xiàn)多種登錄方式(常規(guī)方式外的郵件、手機(jī)驗(yàn)證碼登錄),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • MybatisPlus使用注解的多對(duì)多級(jí)聯(lián)查詢方式

    MybatisPlus使用注解的多對(duì)多級(jí)聯(lián)查詢方式

    這篇文章主要介紹了MybatisPlus使用注解的多對(duì)多級(jí)聯(lián)查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評(píng)論