实体类(继承):
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 毫秒