java判斷對象中某個屬性是否為空方法代碼
問題:java對象接受從數(shù)據(jù)庫查出來的數(shù)據(jù)時,對對象的某一屬性進(jìn)行操作,在操作屬性中存儲的數(shù)據(jù)中不對進(jìn)行檢查,會出現(xiàn)空指針異常的情況。
問題再現(xiàn):新建一個實體類
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());
}這里就會報異常

通過這里看以看出,取出實體類中的數(shù)據(jù)是沒問題的,但當(dāng)我們對course屬性進(jìn)行操作時,就會包空指針異常。
解決問題思路:我們需要提前判斷這個屬性是否為空。
為了解決問題我們用到了反射,并把封裝成了一個工具類
public class ObjectUtil {
/**
* 判斷對象中部分屬性值是否不為空
*
* @param object 對象
* @param excludeFieldNames 選擇校驗的屬性名稱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屬性為空時
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í)行,因為此時course屬性為空,判斷不成立。
當(dāng)course屬性不為空時:
@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)屬性不為空時,判斷為真。 此時我們就完成了對屬性是否為空的判斷。
總結(jié)
到此這篇關(guān)于java判斷對象中某個屬性是否為空的文章就介紹到這了,更多相關(guān)java判斷對象屬性為空內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis緩存,泛型集合與json字符串的相互轉(zhuǎn)換實例
這篇文章主要介紹了Redis緩存,泛型集合與json字符串的相互轉(zhuǎn)換實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
Java?Elastic-Job分布式定時任務(wù)使用方法介紹
xxl-job?通過一個中心式的調(diào)度平臺,調(diào)度多個執(zhí)行器執(zhí)行任務(wù),調(diào)度中心通過?DB?鎖保證集群分布式調(diào)度的一致性,這樣擴(kuò)展執(zhí)行器會增大?DB?的壓力,然而大部分公司的任務(wù)數(shù),執(zhí)行器并不多;xxl-job?提供了非常好用的監(jiān)控頁面甚至還有任務(wù)失敗的郵件告警功能2023-01-01
spring boot mybatis多數(shù)據(jù)源解決方案過程解析
這篇文章主要介紹了spring boot mybatis多數(shù)據(jù)源解決方案過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11
Java設(shè)計模式之簡單工廠 工廠方法 抽象工廠深度總結(jié)
設(shè)計模式(Design Pattern)是前輩們對代碼開發(fā)經(jīng)驗的總結(jié),是解決特定問題的一系列套路。它不是語法規(guī)定,而是一套用來提高代碼可復(fù)用性、可維護(hù)性、可讀性、穩(wěn)健性以及安全性的解決方案2021-09-09
jdk17+springboot使用webservice的踩坑實戰(zhàn)記錄
這篇文章主要給大家介紹了關(guān)于jdk17+springboot使用webservice踩坑的相關(guān)資料,網(wǎng)上很多教程是基于jdk8的,所以很多在17上面跑不起來,折騰兩天,直接給答案,需要的朋友可以參考下2024-01-01
Java中Thread和Runnable創(chuàng)建線程的方式對比
本文主要介紹了Java中Thread和Runnable創(chuàng)建線程的方式對比,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07

