您的位置:首页 > 编程语言 > Java开发

利用反射原理用get/set方法设置属性(也可用clone,但如果有特殊处理的东西,这个好用)

2017-07-19 18:16 375 查看
先创建一个POJO,如User,里面所有属性都用get/set方法,假设original是User的一个实例对象,已经设置了各种属性,现在要把属性赋值到新对象里去。

public User testCopy(User original){
User copy=new User();
Class<User> cla=(Class<User>) original.getClass();
Method[] ffs=cla.getDeclaredMethods();//获取所有声明的方法,不包含父类里的方法
for (Method method : ffs) {
//如果有需要特殊处理的可以这样写
if(method.toString().contains(".getBjs()")){
//处理过程
continue;
}
if(method.toString().contains(".get")){//获取get方法
Object obj=method.invoke(original, null);//获取调用get方法后获得的对象
if(obj!=null){
Class[] cls=new Class[]{obj.getClass()};//返回值类型数组,后面调用对应set方法时要用此类型对应的参数类型
String str=method.toString();
int start=str.indexOf(".get");
str=str.substring(start, str.length());
String setmethod=str.replace(".get", "set").replace("()", "");//处理含包名、类名、方法名及括号的get方法,变成只有方法名且没有括号的set方法
Method m=cla.getDeclaredMethod(setmethod,cls);//set方法的参数类型和get方法的返回值类型对应
m.invoke(copy, obj);//调用set方法设置值
}
}
}
return copy;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 反射
相关文章推荐