如何解决有没有办法获取一个类的所有成员类并循环它们以执行方法?
我有一个 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() 方法?
我的想法是获取 Managerclass 的所有声明类。然后循环数组,在每个对象上执行 printResult() 方法。
Class<?>[] classes = Manager.class.getDeclaredClasses();
for (int i = 0; i < classes.length; i++) {
....
}
但这行不通。数组为空。
那么,如果这是一种自动化的方法,您有什么想法吗? 还有更多的方法是以这种方式构建的。 我哪儿也去不了。像我想象的那样这样做有意义吗?
解决方法
好的,所以这里真正的问题是您错误地使用了 Java 术语。
没有 Manager
类的成员类。是的。这就是我说的!
“成员类”是在另一个类中声明的类。但是在 Manager
中没有声明任何类。
然而,在Manager
内声明了字段(“成员字段”);即 classA
、classB
等。这些字段有类;即 ClassA
、ClassB
等。
如果要查找类的成员字段,请使用 Class.getDeclaredFields()
方法。这将为您提供一组 Field
对象。
然后您可以通过调用 Field.getType()
来获取每个字段的类。然后您可以使用反射来查找类的 printResult()
方法并在目标对象的相应字段中的值上调用它。
注意事项:
-
Class
返回的getType()
可以表示原始类型或数组类型而不是类。此Class
将代表字段的擦除类型。 -
如果您想要源代码中声明的
Type
,请改用Field.getGenericType()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。