我有一个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()-method自动化?
我的想法是获得管理类的所有declaredClasses。然后对每个对象执行printResult()-methode作为数组的循环。
Class<?>[] classes = Manager.class.getDeclaredClasses();
for (int i = 0; i < classes.length; i++) {
....
}但这不管用。数组是空的。
那么,你有一个想法,如果这是一种方式,以实现自动化?还有更多的方法是以这种方式构造的。我在这里哪儿也不去。像我想象的那样,这样做有意义吗?
发布于 2021-06-15 09:55:07
好的,这里真正的问题是您使用的Java术语不正确。
Manager 没有类的成员类。是的。我是这么说的!
“成员类”是在另一个类中声明的类。但是在Manager中没有任何声明的类。
但是,有一些字段(“成员字段”)是在Manager中声明的,即classA、classB等等。这些字段有类,即ClassA、ClassB等。
如果要查找类的成员字段,请使用Class.getDeclaredFields()方法。这将为您提供一个Field对象数组。
然后,您可以通过在每个字段上调用Field.getType()来获取它的类。然后,您可以使用反射查找类printResult()方法,并在目标对象各自字段中的值上调用它。
备注:
getType()返回的Class可以表示原始类型或数组类型,而不是类。此Class将表示字段的擦除类型.如果您想要在源代码中声明的
Field.getGenericType() .。
https://stackoverflow.com/questions/67982754
复制相似问题