java属性copy BeanUtils.copyProperties(to, from)问题

java_freshman01 2012-01-13 10:27:06
BeanUtils.copyProperties(to, from);只能全部属性进行copy,有没有一个工具类可以将 from类中的不为NULL的属性copy到to类中相应的属性。from类中为null的属性,to类中保持不变。
...全文
918 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
MGL锅仔 2013-12-31
  • 打赏
  • 举报
回复
Apache这个又这个缺陷,也不算是缺陷吧,只是满足不了一些情况而已,我也需要只复制不为空的字段,也找一下资料想想改源代码,可水平不高实在不想硬着头皮看那源代码,所以自己写了一个工具类,实现这样的功能
java_freshman01 2012-08-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

不错呀!
[/Quote]
要是没人回复,我一辈子也结不了贴
ichenfang163 2012-08-07
  • 打赏
  • 举报
回复
不错呀!
java_freshman01 2012-01-13
  • 打赏
  • 举报
回复
就是部分copy的意思
java_freshman01 2012-01-13
  • 打赏
  • 举报
回复
没人回答...哎,无奈啊,还是自己结贴吧。

private static void copyPriperties(Object o1, Object o2) {

String fileName,str,getName,setName;
List fields = new ArrayList();
Method getMethod = null;
Method setMethod = null;
try {
Class c1 = o1.getClass();
Class c2 = o2.getClass();

Field[] fs1 = c1.getDeclaredFields();
Field[] fs2 = c2.getDeclaredFields();
//两个类属性比较剔除不相同的属性,只留下相同的属性
for(int i = 0;i < fs2.length;i++) {
for(int j = 0;j < fs1.length;j++) {
if(fs1[j].getName().equals(fs2[i].getName())) {
fields.add(fs1[j]);
break;
}
}
}
if(null != fields && fields.size() > 0){
for (int i = 0;i < fields.size();i++) {
//获取属性名称
Field f = (Field) fields.get(i);
fileName = f.getName();
//属性名第一个字母大写
str = fileName.substring(0, 1).toUpperCase();
//拼凑getXXX和setXXX方法名
getName = "get" + str + fileName.substring(1);
setName = "set" + str + fileName.substring(1);
//获取get、set方法
getMethod = c1.getMethod(getName, new Class[]{});
setMethod = c2.getMethod(setName, new Class[]{f.getType()});

//获取属性值
Object o = getMethod.invoke(o1, new Object[]{});
System.out.println(fileName + " : " + o);
//将属性值放入另一个对象中对应的属性
if(null != o) {
System.out.println("o2.setMethod = " + setMethod);
setMethod.invoke(o2, new Object[] {o});
}
}
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
java_freshman01 2012-01-13
  • 打赏
  • 举报
回复
额?来人呀

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧