反射,获取基础类中的属性

实体类(继承):

 1 package com.text.vo;
 2 
 3 /**
 4  * @author create by lxn
 5  * @date 2018/4/19 14:53
 6  **/
 7 public class Father {
 8 
 9     private String fname;
10 
11     private String fage;
12 
13     public String getFname() {
14         return fname;
15     }
16 
17     public void setFname(String fname) {
18         this.fname = fname;
19     }
20 
21     public String getFage() {
22         return fage;
23     }
24 
25     public void setFage(String fage) {
26         this.fage = fage;
27     }
28 }
 1 package com.text.vo;
 2 
 3 import com.lzkj.csp.web.invoker.vo.Result;
 4 
 5 /**
 6  * @author create by lxn
 7  * @date 2018/4/19 14:54
 8  **/
 9 public class Son extends Father{
10     private String sname;
11     private String sage;
12 
13     public String getSage() {
14         return sage;
15     }
16 
17     public void setSage(String sage) {
18         this.sage = sage;
19     }
20 
21     public String getSname() {
22 
23         return sname;
24     }
25 
26     public void setSname(String sname) {
27         this.sname = sname;
28     }
29 }

测试类:

  1 import com.text.vo.Son;
  2 import org.apache.commons.lang.Validate;
  3 
  4 import java.lang.reflect.Field;
  5 import java.lang.reflect.Method;
  6 import java.util.ArrayList;
  7 import java.util.List;
  8 
  9 /**
 10  * 反射获取父类的属性
 11  *
 12  * @author create by lxn
 13  * @date 2018/4/19 14:55
 14  **/
 15 public class Testsonfa {
 16 
 17     public static void main(String[] args) throws Exception {
 18 
 19         Son son = new Son();
 20         son.setSname("小明");
 21         son.setSage("10");
 22         son.setFname("小明父亲");
 23         son.setFage("40");
 24         System.out.println("属性-----");
 25         System.out.println("方法-----");
 26         System.out.println("类名-----");
 27         String filename = Son.class.getSimpleName().toLowerCase();
 28         System.out.println(filename);
 29         StringBuffer sb = new StringBuffer();
 30         sb.append("<data>");
 31         sb.append("<" + filename + ">");
 32         List<Field> fields = getAllFieldsList(Son.class);
 33         for (int i = 0; i < fields.size(); i++) {
 34             String name = fields.get(i).getName();
 35             sb.append("<" + name + ">");
 36             Method m = Son.class.getMethod("get" + upperCase1th(name));
 37             String value = (String) m.invoke(son);
 38             sb.append(value);
 39             sb.append("</" + name + ">");
 40             System.out.println(name);
 41         }
 42         Son.class.getDeclaringClass();
 43         sb.append("</" + filename + ">");
 44         sb.append("</data>");
 45         System.out.println("拼装的xml:" + sb.toString());
 46         System.out.println("-----------------------------------------------------------------------------------------");
 47         long start = System.currentTimeMillis();
 48         StringBuffer sb1 = new StringBuffer();
 49         sb1.append("<data>");
 50         Field[] declaredFields = Son.class.getDeclaredFields();
 51         for (Field field :declaredFields) {
 52             String name = field.getName();
 53             String value = (String) Son.class.getMethod("get" + upperCase1th(name)).invoke(son);
 54             sb1.append("<" + name + ">");
 55             sb1.append(value);
 56             sb1.append("</" + name + ">");
 57         }
 58         Class<? super Son> superclass = Son.class.getSuperclass();
 59         String simpleName = superclass.getSimpleName().toLowerCase();
 60         sb1.append("<"+simpleName+">");
 61         Field[] declaredFields1 = superclass.getDeclaredFields();
 62         for (Field field :declaredFields1) {
 63             String name = field.getName();
 64             String value = (String) superclass.getMethod("get" + upperCase1th(name)).invoke(son);
 65             sb1.append("<" + name + ">");
 66             sb1.append(value);
 67             sb1.append("</" + name + ">");
 68         }
 69         sb1.append("</"+simpleName+">");
 70         sb1.append("</data>");
 71         long end = System.currentTimeMillis();
 72         System.out.println("拼装父类xml:"+sb1.toString()+" 耗时:"+(end-start)+" 毫秒");
 73     }
 74 
 75     /**
 76      * 首字母大写
 77      *
 78      * @param str
 79      * @return
 80      */
 81     public static String upperCase1th(String str) {
 82         return str.substring(0, 1).toUpperCase() + str.substring(1);
 83     }
 84 
 85     /**
 86      * 获取子类,父类的属性
 87      *
 88      * @param cls
 89      * @return
 90      */
 91     public static List<Field> getAllFieldsList(final Class<?> cls) {
 92         Validate.isTrue(cls != null, "The class must not be null");
 93         final List<Field> allFields = new ArrayList<Field>();
 94         Class<?> currentClass = cls;
 95         while (currentClass != null) {
 96             final Field[] declaredFields = currentClass.getDeclaredFields();
 97             for (final Field field : declaredFields) {
 98                 allFields.add(field);
 99             }
100             currentClass = currentClass.getSuperclass();
101         }
102         return allFields;
103     }
104 
105 }

测试结果:

1 拼装的xml:<data><son><sname>小明</sname><sage>10</sage><fname>小明父亲</fname><fage>40</fage></son></data>
2 -----------------------------------------------------------------------------------------
3 拼装父类xml:<data><sname>小明</sname><sage>10</sage><father><fname>小明父亲</fname><fage>40</fage></father></data> 耗时:0 毫秒
原文地址:https://www.cnblogs.com/lxn0216/p/8961265.html