使用JavaBean根據指定條件設置屬性值默認值方式
JavaBean根據指定條件設置屬性值默認值
使用場景
當bean數據中已經裝配好其他數據,在邏輯以及數據轉換完成的最後一步進行數據默認值設置;如果bean的屬性較少,可以手動寫if條件就行瞭,如果bean的屬性太多,你不希望寫太多if的時候,這個方法是很不錯的方法;
使用范圍
僅限於當前類,不能給父類設置值
也是參考瞭其他博主的方法,做的優化和修改,由於時間過瞭很長,找不到原博主的參考文獻瞭,請見諒~
/** * @Description: 根據條件,為bean設置默認指定屬性 * @param sourceObject 當前需要操作的實體類 * @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; } // 獲得屬性的首字母並轉換為大寫,與setXXX對應 String firstLetter = fieldName.substring(0, 1).toUpperCase(); String setMethodName = "set" + firstLetter + fieldName.substring(1); //設置屬性的可訪問標識 boolean accessible = field.isAccessible(); // log.info("可訪問標識:"+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);//調用對象的setXXX方法 } } }else { Object o = field.get(sourceObject); if (o==null){ setMethod.invoke(objectCopy, defaultValue);//調用對象的setXXX方法 } } field.setAccessible(accessible); } org.springframework.beans.BeanUtils.copyProperties(objectCopy, sourceObject); } catch (Exception e) { throw new RuntimeException(e); } } }
使用示例
setDefaultValue(sourceObject, null, "");//屬性值為null的時候設置默認值為空串 setDefaultValue(sourceObject," null", "");//屬性值為"null"字符串的時候設置為空串
JavaBean對象成員變量默認值及數組默認值
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對象的成員變量,都有默認值,如果成員變量是基本類型int 默認值為0,如果是引用類型,其默認值為null //數組對象,如果沒有進行靜態初始化,數組對象其每一個索引位置,如果是存儲基本類型,默認值為0,如果存儲引用類型,默認值就為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 } }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。