java 通過反射和自定義泛型來修改物件
阿新 • • 發佈:2019-02-19
public static <T> T Update(T beforeUpdate,T update){ try { if(beforeUpdate==null) return update; if(update==null) return beforeUpdate; Class<? extends Object> clazz = beforeUpdate.getClass(); Class<? extends Object> clazzUpdate = update.getClass(); Field[] fields = clazzUpdate.getDeclaredFields();//得到要修改的物件的屬性陣列for (int i=0;i<fields.length;i++){ Field field = fields[i]; //得到每個屬性 field.setAccessible(true); //打破封裝 String name = field.getName(); //得到屬性名 Class type=field.getType(); //得到該屬性的型別 Object value = field.get(update); //得到該屬性的get方法的值 if(value!=null){ //找到與原物件相同的屬性的set方法 Method m=clazz.getMethod("set"+upperCase(name),type); m.invoke(beforeUpdate,value);//給該方法設定值 } } } catch (Exception e) { e.printStackTrace(); } return beforeUpdate; }
//首字母轉大寫,轉小寫就加32 public static String upperCase(String str) { char[] ch = str.toCharArray(); ch[0] = (char) (ch[0] - 32); return new String(ch);}