zoukankan      html  css  js  c++  java
  • 反射,获取基础类中的属性

    实体类(继承):

     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 毫秒
  • 相关阅读:
    去年课程设计的作品
    终于结束了期末考试
    记在园子里安家
    ASP.NET中实现无刷新级联
    ASP.NET中利用JQuery AJAX修改用户密码
    The LogStructured MergeTree(译)(转载)
    我常用的Latex中文报告模板(一)
    LRU算法的简单实现( C语言 + uthash包)
    epoll 使用详解
    转载系列之一:浅析Hadoop文件格式
  • 原文地址:https://www.cnblogs.com/lxn0216/p/8961265.html
Copyright © 2011-2022 走看看