`
xxqn
  • 浏览: 73879 次
  • 性别: Icon_minigender_1
  • 来自: 广东韶关
社区版块
存档分类
最新评论

取类的所有属性、方法,包括所有父类的属性方法

 
阅读更多
代码:
/**
* 获取类实例的属性值
*
* @param clazz
*            类名
* @return 类名.属性名=属性类型
*/
public static ArrayList<Field> getClassFields(Class clazz) {
ArrayList<Field> map = new ArrayList<Field>();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {

if (field.getName().matches("this[$].*")) {

} else {
map.add(field);
}

}
// if (includeParentClass)
getParentClassFields(map, clazz.getSuperclass());
return map;
}

/**
* 获取类实例的父类的属性值
*
* @param map
*            类实例的属性值Map
* @param clazz
*            类名
* @return 类名.属性名=属性类型
*/
private static ArrayList<Field> getParentClassFields(ArrayList<Field> map, Class clazz) {
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (field.getName().matches("this[$].*")) {

} else {
map.add(field);
}

}
if (clazz.getSuperclass() == null) {
return map;
}
getParentClassFields(map, clazz.getSuperclass());
return map;
}

/**
* 获取类实例的方法
*
* @param clazz
*            类名
* @return List
*/
public static List<Method> getMothds(Class clazz) {
List<Method> list = new ArrayList<Method>();
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
list.add(method);
}
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 || clazz.getSuperclass() == null) {
return list;
}
getParentClassMothds(list, clazz.getSuperclass());
return list;
}


测试代码:

/**
* 测试
*
* @param args
*/
@Test
public  void testClassFild() {

// 获取属性
ArrayList<Field> map = SystemTool.getClassFields(Student.class);
for (Field fld : map) {
System.out.println(fld.getName());
}
// 获取方法
List<Method> methods = SystemTool.getMothds(Student.class);
for (Method method : methods) {
System.out.println(method.getName());
}
System.out.println("方法总数:" + methods.size());
}

class Student extends School{
private int age;

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}

class School extends Country {
private String schoolName;

public String getSchoolName() {
return schoolName;
}

public void setSchoolName(String schoolName) {
this.schoolName = schoolName;
}


}
class Country{

private String countryName;

public String getCountryName() {
return countryName;
}

public void setCountryName(String countryName) {
this.countryName = countryName;
}


}

分享到:
评论

相关推荐

    java反射获取所有属性,获取所有get方法,包括子类父类

    java反射获取所有属性,获取所有get方法,包括子类父类,以及包括List集合类

    【05-面向对象(下)】

    仅为该类的属性提供getter方法,不要为该类的属性提供setter方法,因为普通方法无法修改final修饰的 属性  –4.如有必要,重写Object类中hashCode 和equals •缓存实例的不可变类:如果程序经常需要使用不可变类...

    java课程实验

    1) 设计一个教师类Teacher,属性有编号(no)、姓名(name)、年龄(age)、所属学院(seminary),为这些属性设置相应的get和set方法; 2) 为Teacher类添加方法equals;(当两个教师对象的no相同时返回true) 3) 为...

    银行账户管理系统 简称BAM(项目介绍及源码)绝对精典

    将Account类作成完全封装,注意:要辨别每个属性的set/get方法是否需要公开 练习3:(继承,多态) 银行的客户分为两类,储蓄账户(SavingAccount)和信用账户(CreditAccount),区别在于储蓄账户不允许透支,而信用账户可以...

    JAVA面试题最全集

    一个“.java”原文件中是否可以包括多个类(不是内部类)? 53.掌握内部类和接口的概念 54.StringTokenizer类的使用 55.数据结构,如何遍历List中的元素? 如果要按照键值保存或者访问数据,使用什么数据结构? ...

    java 面试题 总结

     final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的...

    超级有影响力霸气的Java面试题大全文档

     final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的...

    计算机二级公共基础知识

    算法的基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。 (3)算法的3种基本控制结构 算法的3种基本控制结构是:顺序结构、选择结构、循环结构。 (4)算法基本设计方法 算法基本设计方法:列举法、...

    java面试800题

    Q0032 Oracle的集合操作函数,如sum(),avg(),max(),min(),与select,where,grouby,having的先后顺序,使用方法 Oracle集合查询基本知识,只有进行分组的列,才可以取在集合查询SQL语句中取字段,先Group By,再Having...

    Hibernate注释大全收藏

    整个层次结构中的所有父类和子类属性都映射到同一个表中,他们的实例通过一个辨别符列(discriminator)来区分。 Plane 是父类。@DiscriminatorColumn 注解定义了辨别符列。对于继承层次结构中的每个类, @...

    千方百计笔试题大全

    94、元素有一个cascade属性,如果希望Hibernate级联保存集合中的对象,casecade属性应该取什么值?(单选)(D) 22 95、以下哪些属于Session的方法?(A,B,C,D,F) 22 96、Hibernate工作原理及为什么要用? 22 97、...

    java面试宝典

    94、元素有一个cascade属性,如果希望Hibernate级联保存集合中的对象,casecade属性应该取什么值?(单选)(D) 22 95、以下哪些属于Session的方法?(A,B,C,D,F) 22 96、Hibernate工作原理及为什么要用? 22 97、...

    最新Java面试宝典pdf版

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    Java面试笔试资料大全

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    Java面试宝典2010版

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 2、Java有没有goto? 3、说说&和&&的区别。 4、在JAVA中如何跳出当前的多重嵌套循环? 5、switch语句能否作用在byte上,能否作用在long上...

    Java面试宝典2012版

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用...

    Java面试宝典2012新版

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    Java面试宝典-经典

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    JAVA面试宝典2010

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 8 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

Global site tag (gtag.js) - Google Analytics