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

java判斷對象中某個(gè)屬性是否為空方法代碼

 更新時(shí)間:2023年07月07日 16:32:55   作者:大長腿180  
這篇文章主要給大家介紹了關(guān)于java判斷對象中某個(gè)屬性是否為空的相關(guān)資料,最近遇到后臺接收值的時(shí)候,需要對接收對象進(jìn)行非空校驗(yàn),需要的朋友可以參考下

問題:java對象接受從數(shù)據(jù)庫查出來的數(shù)據(jù)時(shí),對對象的某一屬性進(jìn)行操作,在操作屬性中存儲的數(shù)據(jù)中不對進(jìn)行檢查,會出現(xiàn)空指針異常的情況。

問題再現(xiàn):新建一個(gè)實(shí)體類

public class Student {
    private Integer id;
    private String name;
    private String age;
    private String course;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getCourse() {
        return course;
    }
    public void setCourse(String course) {
        this.course = course;
    }
}

進(jìn)行測試

    @Test
    public void test(){
        //數(shù)據(jù)模擬
        Student student = new Student();
        student.setId(1);
        student.setName("張三");
        student.setAge("12");
        //這里不對course屬性賦值
//        student.setCourse("語文,數(shù)學(xué),英語");
        System.out.println(student.getId());
        System.out.println(student.getName());
        System.out.println(student.getAge());
        System.out.println(student.getCourse());
    }

輸出內(nèi)容:
        1
        張三
        12
        null

對course屬性進(jìn)行操作

    @Test
    public void test(){
        //數(shù)據(jù)模擬
        Student student = new Student();
        student.setId(1);
        student.setName("張三");
        student.setAge("12");
        //這里不對course屬性賦值
//        student.setCourse("語文,數(shù)學(xué),英語");
        System.out.println(student.getCourse().length());
    }

 這里就會報(bào)異常

 通過這里看以看出,取出實(shí)體類中的數(shù)據(jù)是沒問題的,但當(dāng)我們對course屬性進(jìn)行操作時(shí),就會包空指針異常。

解決問題思路:我們需要提前判斷這個(gè)屬性是否為空。

為了解決問題我們用到了反射,并把封裝成了一個(gè)工具類

public class ObjectUtil {
    /**
     * 判斷對象中部分屬性值是否不為空
     *
     * @param object       對象
     * @param excludeFieldNames 選擇校驗(yàn)的屬性名稱List集合
     * @return
     */
    public static boolean checkObjFieldsIsNotNull(Object object, List<String> excludeFieldNames) {
        if (null == object) {
            return false;
        }
        try {
            for (Field f : object.getClass().getDeclaredFields()) {
                f.setAccessible(true);
                if (excludeFieldNames.contains(f.getName()) && f.get(object) != null && StringUtils.isNotBlank(f.get(object).toString())) {
                    return true;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}

使用工具類進(jìn)行判斷:

    @Test
    public void test(){
        //數(shù)據(jù)模擬
        Student student = new Student();
        student.setId(1);
        student.setName("張三");
        student.setAge("12");
        //這里不對course屬性賦值
//        student.setCourse("語文,數(shù)學(xué),英語");
        //當(dāng)course屬性為空時(shí)
        System.out.println("執(zhí)行開始");
        if (ObjectUtil.checkObjFieldsIsNotNull(student,Arrays.asList("course"))){
            System.out.println("執(zhí)行");
            System.out.println(student.getCourse().length());
        }
        System.out.println("執(zhí)行完畢");
    }

輸出結(jié)果: 

從這里可以看出if條件為空,并沒有執(zhí)行,因?yàn)榇藭r(shí)course屬性為空,判斷不成立。

當(dāng)course屬性不為空時(shí):

    @Test
    public void test(){
        //數(shù)據(jù)模擬
        Student student = new Student();
        student.setId(1);
        student.setName("張三");
        student.setAge("12");
        student.setCourse("語文,數(shù)學(xué),英語");
        System.out.println("執(zhí)行開始");
        if (ObjectUtil.checkObjFieldsIsNotNull(student,Arrays.asList("course"))){
            System.out.println("執(zhí)行");
            System.out.println(student.getCourse().length());
        }
        System.out.println("執(zhí)行完畢");
    }

執(zhí)行結(jié)果: 

可以看出:當(dāng)屬性不為空時(shí),判斷為真。 此時(shí)我們就完成了對屬性是否為空的判斷。

總結(jié)

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

相關(guān)文章

  • Redis緩存,泛型集合與json字符串的相互轉(zhuǎn)換實(shí)例

    Redis緩存,泛型集合與json字符串的相互轉(zhuǎn)換實(shí)例

    這篇文章主要介紹了Redis緩存,泛型集合與json字符串的相互轉(zhuǎn)換實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • RabbitMQ簡單隊(duì)列實(shí)例及原理解析

    RabbitMQ簡單隊(duì)列實(shí)例及原理解析

    這篇文章主要介紹了RabbitMQ簡單隊(duì)列實(shí)例及原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 淺談SpringBoot優(yōu)化技巧

    淺談SpringBoot優(yōu)化技巧

    這篇文章主要介紹了淺談SpringBoot優(yōu)化技巧,需要的朋友可以參考下。
    2017-09-09
  • Java?Elastic-Job分布式定時(shí)任務(wù)使用方法介紹

    Java?Elastic-Job分布式定時(shí)任務(wù)使用方法介紹

    xxl-job?通過一個(gè)中心式的調(diào)度平臺,調(diào)度多個(gè)執(zhí)行器執(zhí)行任務(wù),調(diào)度中心通過?DB?鎖保證集群分布式調(diào)度的一致性,這樣擴(kuò)展執(zhí)行器會增大?DB?的壓力,然而大部分公司的任務(wù)數(shù),執(zhí)行器并不多;xxl-job?提供了非常好用的監(jiān)控頁面甚至還有任務(wù)失敗的郵件告警功能
    2023-01-01
  • 一次 Java 服務(wù)性能優(yōu)化實(shí)例詳解

    一次 Java 服務(wù)性能優(yōu)化實(shí)例詳解

    這篇文章主要介紹了一次 Java 服務(wù)性能優(yōu)化實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • spring boot mybatis多數(shù)據(jù)源解決方案過程解析

    spring boot mybatis多數(shù)據(jù)源解決方案過程解析

    這篇文章主要介紹了spring boot mybatis多數(shù)據(jù)源解決方案過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java設(shè)計(jì)模式之簡單工廠 工廠方法 抽象工廠深度總結(jié)

    Java設(shè)計(jì)模式之簡單工廠 工廠方法 抽象工廠深度總結(jié)

    設(shè)計(jì)模式(Design Pattern)是前輩們對代碼開發(fā)經(jīng)驗(yàn)的總結(jié),是解決特定問題的一系列套路。它不是語法規(guī)定,而是一套用來提高代碼可復(fù)用性、可維護(hù)性、可讀性、穩(wěn)健性以及安全性的解決方案
    2021-09-09
  • jdk17+springboot使用webservice的踩坑實(shí)戰(zhàn)記錄

    jdk17+springboot使用webservice的踩坑實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于jdk17+springboot使用webservice踩坑的相關(guān)資料,網(wǎng)上很多教程是基于jdk8的,所以很多在17上面跑不起來,折騰兩天,直接給答案,需要的朋友可以參考下
    2024-01-01
  • java實(shí)現(xiàn)微博后臺登錄發(fā)送微博

    java實(shí)現(xiàn)微博后臺登錄發(fā)送微博

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)微博后臺登錄發(fā)送微博的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Java中Thread和Runnable創(chuàng)建線程的方式對比

    Java中Thread和Runnable創(chuàng)建線程的方式對比

    本文主要介紹了Java中Thread和Runnable創(chuàng)建線程的方式對比,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評論