使用JavaBean根據(jù)指定條件設(shè)置屬性值默認(rèn)值方式
JavaBean根據(jù)指定條件設(shè)置屬性值默認(rèn)值
使用場景
當(dāng)bean數(shù)據(jù)中已經(jīng)裝配好其他數(shù)據(jù),在邏輯以及數(shù)據(jù)轉(zhuǎn)換完成的最后一步進(jìn)行數(shù)據(jù)默認(rèn)值設(shè)置;如果bean的屬性較少,可以手動(dòng)寫if條件就行了,如果bean的屬性太多,你不希望寫太多if的時(shí)候,這個(gè)方法是很不錯(cuò)的方法;
使用范圍
僅限于當(dāng)前類,不能給父類設(shè)置值
也是參考了其他博主的方法,做的優(yōu)化和修改,由于時(shí)間過了很長,找不到原博主的參考文獻(xiàn)了,請見諒~
/** ?* @Description: 根據(jù)條件,為bean設(shè)置默認(rèn)指定屬性 ?* @param sourceObject 當(dāng)前需要操作的實(shí)體類 ?* @param targetString 需要被替換的屬性的值 ?* @param defaultValue 被替換的值 ?* @return: void ?* @Author:? ?* @Date: 2021/4/26 */ ? ? public static void setDefaultValue(Object sourceObject, String targetString, String defaultValue) { ? ? ? ? if (sourceObject != null) { ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? Class<?> clazz = sourceObject.getClass(); ? ? ? ? ? ? ? ? Field[] fields = clazz.getDeclaredFields(); ? ? ? ? ? ? ? ? Object objectCopy = clazz.getConstructor(new Class[]{}).newInstance(); ? ? ? ? ? ? ? ? org.springframework.beans.BeanUtils.copyProperties(sourceObject, objectCopy); ? ? ? ? ? ? ? ? for (Field field : fields) { ? ? ? ? ? ? ? ? ? ? //修飾符 ? ? ? ? ? ? ? ? ? ? int mod = field.getModifiers(); ? ? ? ? ? ? ? ? ? ? if (Modifier.isStatic(mod)) { ? ? ? ? ? ? ? ? ? ? ? ? continue; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? //屬性名稱 ? ? ? ? ? ? ? ? ? ? String fieldName = field.getName(); ? ? ? ? ? ? ? ? ? ? if (fieldName.equals("serialVersionUID")) { ? ? ? ? ? ? ? ? ? ? ? ? continue; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? // 獲得屬性的首字母并轉(zhuǎn)換為大寫,與setXXX對應(yīng) ? ? ? ? ? ? ? ? ? ? String firstLetter = fieldName.substring(0, 1).toUpperCase(); ? ? ? ? ? ? ? ? ? ? String setMethodName = "set" + firstLetter + fieldName.substring(1); ? ? ? ? ? ? ? ? ? ? //設(shè)置屬性的可訪問標(biāo)識(shí) ? ? ? ? ? ? ? ? ? ? boolean accessible = field.isAccessible(); ? ? ? ? ? ? ? ? ? ? // ?log.info("可訪問標(biāo)識(shí):"+accessible); ? ? ? ? ? ? ? ? ? ? field.setAccessible(true); ? ? ? ? ? ? ? ? ? ? Method setMethod = clazz.getMethod(setMethodName, field.getType()); ? ? ? ? ? ? ? ? ? ? Object fieldValueO =field.get(sourceObject); ? ? ? ? ? ? ? ? ? ? if (targetString!=null){ ? ? ? ? ? ? ? ? ? ? ? ? if (fieldValueO instanceof String){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? String fieldValue = (String) field.get(sourceObject); ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (targetString.equals(fieldValue)){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? setMethod.invoke(objectCopy, defaultValue);//調(diào)用對象的setXXX方法 ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? }else { ? ? ? ? ? ? ? ? ? ? ? ? Object o = field.get(sourceObject); ? ? ? ? ? ? ? ? ? ? ? ? if (o==null){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? setMethod.invoke(objectCopy, defaultValue);//調(diào)用對象的setXXX方法 ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? field.setAccessible(accessible); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? org.springframework.beans.BeanUtils.copyProperties(objectCopy, sourceObject); ? ? ? ? ? ? } catch (Exception e) { ? ? ? ? ? ? ? ? throw new RuntimeException(e); ? ? ? ? ? ? } ? ? ? ? } ? ? }
使用示例
setDefaultValue(sourceObject, null, "");//屬性值為null的時(shí)候設(shè)置默認(rèn)值為空串 setDefaultValue(sourceObject," null", "");//屬性值為"null"字符串的時(shí)候設(shè)置為空串
JavaBean對象成員變量默認(rèn)值及數(shù)組默認(rèn)值
public class StudentTest { private int id; private String name; int[] arr; public int[] getArr() { return arr; } public void setArr(int[] arr) { this.arr = arr; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } public class guanxiaokun { public static void main(String[] args) { //對于javaBean對象的成員變量,都有默認(rèn)值,如果成員變量是基本類型int 默認(rèn)值為0,如果是引用類型,其默認(rèn)值為null //數(shù)組對象,如果沒有進(jìn)行靜態(tài)初始化,數(shù)組對象其每一個(gè)索引位置,如果是存儲(chǔ)基本類型,默認(rèn)值為0,如果存儲(chǔ)引用類型,默認(rèn)值就為null System.out.println(new StudentTest().getId());//0 System.out.println(new StudentTest().getName());//null System.out.println(new StudentTest().getArr());//null int[] arr = new int[3]; String[] str = new String[3]; System.out.println(arr[0]);//0 System.out.println(str[0]);//null } }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java使用線程池實(shí)現(xiàn)socket編程的方法詳解
這篇文章主要為大家詳細(xì)介紹了Java使用線程池實(shí)現(xiàn)socket編程的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03Spring Transaction事務(wù)實(shí)現(xiàn)流程源碼解析
此文就Spring 事務(wù)實(shí)現(xiàn)流程進(jìn)行源碼解析,我們可以借此對Spring框架更多一層理解,下面以xml形式創(chuàng)建一個(gè)事務(wù)進(jìn)行分析2022-09-09Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(39)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07java編程實(shí)現(xiàn)獲取服務(wù)器IP地址及MAC地址的方法
這篇文章主要介紹了java編程實(shí)現(xiàn)獲取機(jī)器IP地址及MAC地址的方法,實(shí)例分析了Java分別針對單網(wǎng)卡及多網(wǎng)卡的情況下獲取服務(wù)器IP地址與MAC地址的相關(guān)技巧,需要的朋友可以參考下2015-11-11Springboot Mybatis Plus自動(dòng)生成工具類詳解代碼
mybatis-plus 是一個(gè) Mybatis 的增強(qiáng)工具,在 Mybatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生,這篇文章帶你使用Springboot Mybatis Plus自動(dòng)生成工具類2021-11-11解決springboot項(xiàng)目不配置數(shù)據(jù)源啟動(dòng)報(bào)錯(cuò)問題
這篇文章主要介紹了解決springboot項(xiàng)目不配置數(shù)據(jù)源啟動(dòng)報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12idea2020安裝MybatisCodeHelper插件的圖文教程
這篇文章主要介紹了idea2020安裝MybatisCodeHelper插件的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09