读书人

获取随便java类实例的方法和属性包括

发布时间: 2012-12-23 11:28:15 作者: rapoo

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

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 Stringcode;private Stringname;private Datebirthday;private intage;private intclassNumber;private booleanisGoodStudent;private List< School >sch;private Schoolsch1= 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 StringcountryName;private longpeopleNumber;public long getPeopleNumber ( ){return peopleNumber;}public void setPeopleNumber ( long peopleNumber ){this.peopleNumber = peopleNumber;}}class School extends Country{private StringschoolName;private Stringaddress;public String getAddress ( ){return address;}public void setAddress ( String address ){this.address = address;}}

?

读书人网 >编程

热点推荐