java判斷對象中某個(gè)屬性是否為空方法代碼
問題: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í)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07Java?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í)例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07spring boot mybatis多數(shù)據(jù)源解決方案過程解析
這篇文章主要介紹了spring boot mybatis多數(shù)據(jù)源解決方案過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Java設(shè)計(jì)模式之簡單工廠 工廠方法 抽象工廠深度總結(jié)
設(shè)計(jì)模式(Design Pattern)是前輩們對代碼開發(fā)經(jīng)驗(yàn)的總結(jié),是解決特定問題的一系列套路。它不是語法規(guī)定,而是一套用來提高代碼可復(fù)用性、可維護(hù)性、可讀性、穩(wěn)健性以及安全性的解決方案2021-09-09jdk17+springboot使用webservice的踩坑實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了關(guān)于jdk17+springboot使用webservice踩坑的相關(guān)資料,網(wǎng)上很多教程是基于jdk8的,所以很多在17上面跑不起來,折騰兩天,直接給答案,需要的朋友可以參考下2024-01-01java實(shí)現(xiàn)微博后臺登錄發(fā)送微博
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)微博后臺登錄發(fā)送微博的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-07-07Java中Thread和Runnable創(chuàng)建線程的方式對比
本文主要介紹了Java中Thread和Runnable創(chuàng)建線程的方式對比,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07