有没有办法获取 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
里面声明了字段(“成员字段”);即 classA
、classB
等等。而这些字段有classes;即 ClassA
、ClassB
等等。
如果要查找class的成员字段,请使用Class.getDeclaredFields()
方法。这将为您提供一个 Field
对象数组。
然后您可以通过调用 Field.getType()
来获取每个字段的 class。然后你可以使用反射来查找 classses printResult()
方法并在目标对象的各个字段中的值上调用它。
备注:
getType()
返回的Class
可能表示基本类型或数组类型,而不是class。此 Class
将表示字段的擦除类型。
如果您想要源代码中声明的 Type
,请改用 Field.getGenericType()
。
我有一个 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
.
但是,Manager
里面声明了字段(“成员字段”);即 classA
、classB
等等。而这些字段有classes;即 ClassA
、ClassB
等等。
如果要查找class的成员字段,请使用Class.getDeclaredFields()
方法。这将为您提供一个 Field
对象数组。
然后您可以通过调用 Field.getType()
来获取每个字段的 class。然后你可以使用反射来查找 classses printResult()
方法并在目标对象的各个字段中的值上调用它。
备注:
getType()
返回的Class
可能表示基本类型或数组类型,而不是class。此Class
将表示字段的擦除类型。如果您想要源代码中声明的
Type
,请改用Field.getGenericType()
。