有没有办法获取 class 的所有 Memberclasses 并遍历它们以执行方法?

Is there a way to get all Memberclasses of a class and loop over them to excecute methods?

我有一个 ManagerCLass,其中包含许多其他对象。这是方法,它采用这些对象并在这些对象上调用方法。 示例:

public class Manager extends BaseManager {



ClassA classA = new ClassA();
ClassB classB = new ClassB();
ClassC classC = new ClassC();
ClassD classD = new ClassD();
ClassE classE = new ClassE();


public void callMethodsOnObjects() {
    classA.printResult();
    classB.printResult();
    classC.printResult();
    classD.printResult();
    classE.printResult();
}

}

这些 类 具有相同的超类。现在我的问题是,有没有办法自动执行 callMethodsOnObjects() 方法?

我的想法是获取 Manager 类的所有 declaredClasses。然后循环数组并在每个对象上执行 printResult() 方法。

Class<?>[] classes = Manager.class.getDeclaredClasses();

    for (int i = 0; i < classes.length; i++) {
        ....
    }

但这行不通。数组为空。

如果这是一种自动化方法,您有什么想法吗? 还有更多的方法是这样构造的。 我在这里一事无成。像我想象的那样这样做有意义吗?

好的,所以这里真正的问题是您使用的 Java 术语不正确。

Manager class 没有成员 class。 是的。就是我说的!

“成员 class”是在另一个 class 中声明的 class。但是 Manager.

中没有声明任何 classes

但是,Manager里面声明了字段(“成员字段”);即 classAclassB 等等。而这些字段有classes;即 ClassAClassB 等等。

如果要查找class的成员字段,请使用Class.getDeclaredFields()方法。这将为您提供一个 Field 对象数组。

然后您可以通过调用 Field.getType() 来获取每个字段的 class。然后你可以使用反射来查找 classses printResult() 方法并在目标对象的各个字段中的值上调用它。

备注:

  1. getType()返回的Class可能表示基本类型或数组类型,而不是class。此 Class 将表示字段的擦除类型。

  2. 如果您想要源代码中声明的 Type,请改用 Field.getGenericType()