使用JavaBean根據(jù)指定條件設(shè)置屬性值默認(rèn)值方式
JavaBean根據(jù)指定條件設(shè)置屬性值默認(rèn)值
使用場(chǎng)景
當(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)了,請(qǐng)見諒~
/**
?* @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對(duì)應(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)用對(duì)象的setXXX方法
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }else {
? ? ? ? ? ? ? ? ? ? ? ? Object o = field.get(sourceObject);
? ? ? ? ? ? ? ? ? ? ? ? if (o==null){
? ? ? ? ? ? ? ? ? ? ? ? ? ? setMethod.invoke(objectCopy, defaultValue);//調(diào)用對(duì)象的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對(duì)象成員變量默認(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) {
//對(duì)于javaBean對(duì)象的成員變量,都有默認(rèn)值,如果成員變量是基本類型int 默認(rèn)值為0,如果是引用類型,其默認(rèn)值為null
//數(shù)組對(duì)象,如果沒有進(jìn)行靜態(tài)初始化,數(shù)組對(duì)象其每一個(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)文章
springcloud連接遠(yuǎn)程nacos失敗顯示localhost服務(wù)連接失敗的問題解決
這篇文章主要介紹了springcloud連接遠(yuǎn)程nacos失敗顯示localhost服務(wù)連接失敗的問題解決,文中有詳細(xì)的代碼示例供大家參考,對(duì)大家解決問題有一定的幫助,需要的朋友可以參考下2024-03-03
Springboot根據(jù)配置文件動(dòng)態(tài)注入接口實(shí)現(xiàn)類詳解
這篇文章主要介紹了Springboot根據(jù)配置文件動(dòng)態(tài)注入接口實(shí)現(xiàn)類詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,需要的朋友可以參考下,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
Spring Boot整合Spring Security的示例代碼
這篇文章主要介紹了Spring Boot整合Spring Security的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
SpringBoot整合SpringSecurity和JWT和Redis實(shí)現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證
Spring Security是一個(gè)可以為Java應(yīng)用程序提供全面安全服務(wù)的框架,同時(shí)它也可以輕松擴(kuò)展以滿足自定義需求,本文主要介紹了SpringBoot整合SpringSecurity和JWT和Redis實(shí)現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證,感興趣的可以了解一下2023-11-11

