六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 56|回复: 0

获取任意java类实例的方法和属性,包括父类的方法和属性

[复制链接]

升级  17.33%

18

主题

18

主题

18

主题

秀才

Rank: 2

积分
76
 楼主| 发表于 2013-2-3 14:39:49 | 显示全部楼层 |阅读模式
import java.lang.reflect.Field;   import java.lang.reflect.Method;   import java.util.ArrayList;   import java.util.Date;   import java.util.HashMap;   import java.util.List;   import java.util.Map;     /**   * 获取任意java类实例的方法和属性,包括父类的方法和属性   * @author weishaoxiang   */  public class Student extends School   {              private String          code;       private String          name;       private Date            birthday;       private int             age;       private int             classNumber;       private boolean         isGoodStudent;       private List< School >    sch;       private School          sch1    = new School ( );              /**       * 测试       * @param args       */      public static void main ( String[] args )       {           Student student = new Student ( );           // 获取属性           Map< String, Class > map = getClassFields ( student.getClass ( ), true );           for ( Object key : map.keySet ( ) )           {               System.out.println ( "<field=" + key.toString ( ) + "> <Type=" + map.get ( key ) + ">" );           }           // 获取方法           List< Method > methods = getMothds ( student.getClass ( ), true );           for ( Method method : methods )           {               System.out.println ( method.getName ( ) );           }           System.out.println ( "方法总数:" + methods.size ( ) );       }              /**       * 获取类实例的属性值       * @param clazz       *            类名       * @param includeParentClass       *            是否包括父类的属性值       * @return 类名.属性名=属性类型       */      public static Map< String, Class > getClassFields ( Class clazz, boolean includeParentClass )       {           Map< String, Class > map = new HashMap< String, Class > ( );           Field[] fields = clazz.getDeclaredFields ( );           for ( Field field : fields )           {               map.put ( clazz.getName ( ) + "." + field.getName ( ), field.getType ( ) );           }           if ( includeParentClass )               getParentClassFields ( map, clazz.getSuperclass ( ) );           return map;       }              /**       * 获取类实例的父类的属性值       * @param map       *            类实例的属性值Map       * @param clazz       *            类名       * @return 类名.属性名=属性类型       */      private static Map< String, Class > getParentClassFields ( Map< String, Class > map, Class clazz )       {           Field[] fields = clazz.getDeclaredFields ( );           for ( Field field : fields )           {               map.put ( clazz.getName ( ) + "." + field.getName ( ), field.getType ( ) );           }           if ( clazz.getSuperclass ( ) == null )           {               return map;           }           getParentClassFields ( map, clazz.getSuperclass ( ) );           return map;       }              /**       * 获取类实例的方法       * @param clazz       *            类名       * @param includeParentClass       *            是否包括父类的方法       * @return List       */      public static List< Method > getMothds ( Class clazz, boolean includeParentClass )       {           List< Method > list = new ArrayList< Method > ( );           Method[] methods = clazz.getDeclaredMethods ( );           for ( Method method : methods )           {               list.add ( method );           }           if ( includeParentClass )           {               getParentClassMothds ( list, clazz.getSuperclass ( ) );           }           return list;       }              /**       * 获取类实例的父类的方法       * @param list       *            类实例的方法List       * @param clazz       *            类名       * @return List       */      private static List< Method > getParentClassMothds ( List< Method > list, Class clazz )       {           Method[] methods = clazz.getDeclaredMethods ( );           for ( Method method : methods )           {               list.add ( method );           }           if ( clazz.getSuperclass ( ) == Object.class )           {               return list;           }           getParentClassMothds ( list, clazz.getSuperclass ( ) );           return list;       }              public int getAge ( )       {           return age;       }              public void setAge ( int age )       {           this.age = age;       }   }     class Country   {              private String  countryName;       private long    peopleNumber;              public long getPeopleNumber ( )       {           return peopleNumber;       }              public void setPeopleNumber ( long peopleNumber )       {           this.peopleNumber = peopleNumber;       }   }     class School extends Country   {              private String  schoolName;       private String  address;              public String getAddress ( )       {           return address;       }              public void setAddress ( String address )       {           this.address = address;       }   }   
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表