Java不同类的属性拷贝(通过泛型和反射实现) - 全栈笔记

Java不同类的属性拷贝(通过泛型和反射实现)

任亦伟 JAVA 2015-06-28 76 次浏览 没有评论

由于项目用到了WebService,客户端是用cxf自动生成的代码,有时候服务端的类对象,要转换到客户端的类对象上面去,而两者不是同一个类对象,但字段大体相似。总是通过setXXX(getXXX())总是显得有些臃肿和浪费时间,所以写了一个通过的方法,来实现转化,也实现了泛型。供参考,在赋值这一块,我只验证了二者的类型,没有做类型转换。

01
02
public static <T, H> T copyProperty(H sourceObj,Class<T> targetClass){
03
  try {
04
    T targetObj = targetClass.newInstance();
05
    Field[] targetFields = targetClass.getDeclaredFields();
06
    Field[] sourceFields =  sourceObj.getClass().getDeclaredFields();
07
    PropertyDescriptor sfpd = null;
08
    Method readMehtod = null;
09
    PropertyDescriptor tfpd = null;
10
    Method setMethod = null;
11
    for(Field targetField : targetFields){
12
      for(Field sourceField:sourceFields){
13
        if(targetField.getName().equals(sourceField.getName())){
14
          sfpd =new PropertyDescriptor(sourceField.getName(), sourceObj.getClass());
15
          readMehtod = sfpd.getReadMethod();
16
          tfpd = new PropertyDescriptor(targetField.getName(), targetClass);
17
          setMethod = tfpd.getWriteMethod();
18
          //这里只是粗略地做了一下判断...
19
          if(readMehtod.getReturnType().equals(setMethod.getParameterTypes()[0])){
20
            setMethod.invoke(targetObj, readMehtod.invoke(sourceObj));
21
          }
22
        }
23
      }
24
    }
25
    return targetObj;
26
  } catch (Exception e) {
27
    return null;
28
  }
29
}
30

发表评论

回顶部