我想写一个Bean的值复制,用于对两个Bean的属性值复制;
现在基本数据类型的能够正常复制成功,但关联的对象属性就不行了,请问怎么修改?
if(dest.getClass()==src.getClass()){
Field[] destField = dest.getClass().getDeclaredFields();
Field[] srcField = src.getClass().getDeclaredFields();
for(int i=0;i<destField.length;i++){
String destFieldName = destField[i].getName();
String destFieldType = destField[i].getGenericType().toString();
for(int n=0;n<srcField.length;n++){
String srcFieldName = srcField[n].getName();
String srcFieldType = srcField[n].getGenericType().toString();
if(destFieldName.equals(srcFieldName)&&destFieldType.equals(srcFieldType)){
destField[i].setAccessible(true);
srcField[n].setAccessible(true);
Object srcobj = null;
try {
srcobj = srcField[n].get(src);
if(srcobj!=null){
srcField[n].set(dest, srcobj);
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
}
}
什么结果呀?不能复制吗?引用类型和值类型不同,副本中引用变量和原本中引用变量是指向同一个内存地址的。是不是你改原本的值了,所有副本的值也跟着变了。不知道Java有没有提供Clone方法。
bean都由一个get和set方法,你首先获取所有属性的名字,然后将每个属性的名字的首字母改为大写,与set或get字符串拼接,就获取了bean的set和get方法的名称,然后使用getMethod方法获取对应的Method方法,就可以实现反射动态修改属性值了