`
xxqn
  • 浏览: 74901 次
  • 性别: 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方法,包括子类父类

    在标题和描述中提到的知识点主要集中在如何通过反射获取类的所有属性和get方法,包括来自子类和父类的。下面将详细介绍这些内容。 1. **获取所有属性**: 在Java中,`java.lang.Class` 类提供了获取类属性的方法。...

    父类赋值给子类

    总的来说,选择哪种方法取决于具体的需求,包括性能、代码可读性和维护性等因素。在实际项目中,为了保持代码的整洁和可维护性,建议使用属性映射或构造函数参数的方式,尤其是在处理大量属性时。同时,了解所有这些...

    C#中子类调用父类的实现方法

    在C#编程语言中,子类继承父类后,可以访问和使用父类中的成员,包括方法和属性。本文将详细讲解如何在C#中实现子类调用父类的方法。 首先,我们要理解继承的基本概念。在C#中,一个类(子类)可以继承另一个类...

    Java面向对象(高级)- 抽象类与抽象方法(或abstract关键字)

    当设计类的继承结构时,有时父类会被设计得非常通用,只包含通用的属性和方法,而不关注具体实现。例如,我们可以有一个`Animal`类,其中包含`eat()`和`sleep()`方法,但`Animal`类本身无法确定动物具体如何吃或睡,...

    343.341.JAVA基础教程_面向对象(下)-抽象类与抽象方法的使用(343).rar

    1. **继承与多态**:通过继承抽象类,子类可以获取父类的所有属性和方法,包括抽象方法。子类必须实现所有的抽象方法,否则它也会成为一个抽象类。这种机制使得多态成为可能,即同一操作作用于不同的对象,可以有...

    Java多态和实现接口的类的对象赋值给接口引用的方法(推荐)

    当我们创建一个接口类型的引用并将其赋值给实现该接口的类的对象时,这个引用变量可以调用接口中定义的所有方法。在运行时,实际调用的是哪个实现类的方法,取决于引用变量实际指向的对象。 以下是一个简单的例子:...

    CreoJava学习总结

    继承允许新创建的类(子类)继承另一个类(父类)的属性和方法。多态是指允许使用父类型的引用来引用子类的对象,实现不同子类对同一消息做出不同的响应。 5. super和this关键字 在Java中,super关键字用于访问父类...

    Java常见笔试、面试题目深度剖析,方法重写详解、静态代码块与构造方法执行顺序问题

    在面向对象编程中,子类可以继承父类的属性和方法,有时需要根据自己的需求对父类的方法进行定制,这就需要用到方法重写。方法重写必须满足以下条件:子类方法与父类方法有相同的返回类型、名称和参数列表。此外,...

    详解Java继承中属性、方法和对象的关系

    - 当子类属性与父类属性同名时,通常为了避免混淆,我们会避免这样做。然而,如果确实如此,那么在子类中定义的属性会隐藏父类的同名属性。例如,`Student` 类的 `name` 属性遮蔽了 `Person` 类的 `name` 属性。 -...

    Java中抽象类与接口的比较.pdf

    接口中的所有方法都是抽象的,必须由实现该接口的类来实现。 接口的多态性可以体现在多个方面,例如接口可以被多个类实现,每个类可以实现多个接口,一个类可以同时实现多个接口。 三、 抽象类和接口的比较 抽象...

    定义一个学生类(Student),要求: (1)初始化数据成员数据成员(_Sno,_Sname,_Sage); (2)通过属性装饰器定义数据成员(Sno,Sname,Sage); (3)定义特殊方法

    在Python中,类是创建对象的蓝图,它包含数据成员(属性)和行为(方法)。根据题目所给的要求,我们将探讨以下几个关键知识点: 1. **初始化数据成员**: 在Python中,初始化数据成员通常在类的`__init__`方法中...

    \\java类、抽象类、接口、继承和对象解析 .doc

    子类不仅拥有父类的所有非私有成员,还可以添加自己的属性和方法。子类实例可以被视为父类类型的对象,这种类型转换称为向上转型。例如,"男人"是"人"的子类,"张三"作为"男人"的对象,同时也可以视为"人"的对象。 ...

    【05-面向对象(下)】

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

    十分钟JAVA从入门到放弃

    包括面向对象的基本特征、类与对象的关系、基本类型变量与引用类型变量的区别、类方法和类变量的概念、方法重载与多态的应用、`this`关键字的使用场景、访问权限的设定、子类与父类之间的关系、方法重写的实现、`...

    2015Java题库

    ### 面向对象程序设计(Java)题库解析 #### 颈椎题库概述 ...接口中的所有方法默认都是`public abstract`的。接口主要用于定义行为的标准,即方法的签名。一个类可以实现多个接口,从而达到类似于多继承的效果。

    模拟物流快递系统程序设计(面向对象的程序设计)

    在本实验中,我们主要探讨了面向对象编程中的核心概念,包括抽象类、抽象方法、接口、`super`关键字以及多态性,这些都是构建复杂软件系统的基础。下面将详细阐述这些知识点。 1. **抽象类与抽象方法**: 抽象类是...

    半天学完PHP面向对象教程(强力推荐).pdf

    例如,可以定义一个类“汽车”,包含颜色、速度等属性以及启动、停止等方法,而每辆具体的汽车都是这个类的一个对象。 2. 封装:封装是面向对象编程的基本原则之一,它将数据(对象的属性)和操作数据的代码(对象...

    Java面向对象程序设计多态性.ppt

    5. **实战示例**:例如,我们可以创建一个`Person`类,包含姓名和国籍属性,以及一个`eat()`方法。然后创建三个子类,分别是`Chinese`、`American`和`Indian`,它们都重写`eat()`方法以展示各自的饮食习惯。在测试...

    js的继承方法小结(prototype、call、apply)(推荐).docx

    `Boy.prototype = new Personal('小黑', 19)` 这一行代码创建了一个新的 `Personal` 对象,并将其赋值给 `Boy.prototype`,这样 `Boy` 类就拥有了所有 `Personal` 类的属性和方法。 #### 二、使用 Apply 和 Call ...

    软件编程词汇表(一些编程词汇的解释)

    接口可以被类实现,实现类必须提供接口中定义的所有方法的具体实现。接口用于定义对象的行为规范,允许多个类共享相同的接口。 #### 41. Java 源文件 (Java Source File) Java源文件包含了Java程序的源代码。源文件...

Global site tag (gtag.js) - Google Analytics