有些时候需要建立子类继承于父类,尤其是java里面很多类是用mybatis generator生成的。通过父类构造子类,好像很麻烦,要逐个字段进行赋值(反正我没有找到其他好办法)。

想到用反射复制的方式来实现。通过研究,做到了。主要是用了fastjson里面的东西。估计已经有其他类库实现了这个功能,可惜我不知道,只能自己搞。

  

 

 1 import java.beans.Statement;
 2 import java.lang.reflect.Field;
 3 import java.lang.reflect.Method;
 4 import java.lang.reflect.Type;
 5 import java.util.List;
 6 
 7 import com.alibaba.fastjson.JSON;
 8 import com.alibaba.fastjson.util.DeserializeBeanInfo;
 9 import com.alibaba.fastjson.util.FieldInfo;
10 import com.alibaba.fastjson.util.TypeUtils;
11 
12 /**
13  * Created by fenggqc on 2016/6/29.
14  */
15 public class Copyer {
16 
17 
18     public static <B, S extends B>  void Copy(B bo, S so) throws IllegalAccessException {
19 
20         try {
21             Class bc = bo.getClass();
22             if (bo == null || so == null) {
23                 return;
24             }
25 
26 
27             DeserializeBeanInfo deserializeBeanInfo = DeserializeBeanInfo.computeSetters(so.getClass(), (Type) so.getClass());
28             List<FieldInfo> getters = TypeUtils.computeGetters(bo.getClass(), null);
29 
30             List<FieldInfo> setters = deserializeBeanInfo.getFieldList();
31             Object v;
32             FieldInfo getterfield;
33             FieldInfo setterfidld;
34 
35             for (int j = 0; j < getters.size(); j++) {
36 
37                 getterfield=getters.get(j);
38                 for (int i = 0; i < setters.size(); i++) {
39                     setterfidld=setters.get(i);
40 //                    System.out.println(setterfidld.getName());
41 //                    System.out.println(getterfield.getName());
42 
43                     if (setterfidld.getName().compareTo(getterfield.getName()) == 0) {
44                         v = getterfield.getMethod().invoke(bo);
45                        setterfidld.getMethod().invoke(so,v);
46                         break;
47                     }
48 
49                 }
50             }
51         } catch (Exception ex) {
52             System.out.println(ex.toString());
53         }
54 
55 
56     }
57 
58 
59 }
View Code

相关文章: