1. 程式人生 > >java 通過反射和自定義泛型來修改物件

java 通過反射和自定義泛型來修改物件

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);
}