首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以获得类的所有Memberclasses,并对它们进行循环处理?

是否有一种方法可以获得类的所有Memberclasses,并对它们进行循环处理?
EN

Stack Overflow用户
提问于 2021-06-15 08:31:53
回答 1查看 38关注 0票数 0

我有一个ManagerCLass,它包括许多其他对象。下面是方法,它接受这些对象并对这些对象调用一个方法。示例:

代码语言:javascript
复制
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作为数组的循环。

代码语言:javascript
复制
Class<?>[] classes = Manager.class.getDeclaredClasses();

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

但这不管用。数组是空的。

那么,你有一个想法,如果这是一种方式,以实现自动化?还有更多的方法是以这种方式构造的。我在这里哪儿也不去。像我想象的那样,这样做有意义吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-15 09:55:07

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

Manager 没有类的成员类。是的。我是这么说的!

“成员类”是在另一个类中声明的类。但是在Manager中没有任何声明的类。

但是,有一些字段(“成员字段”)是在Manager中声明的,即classAclassB等等。这些字段有类,即ClassAClassB等。

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

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

备注:

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

如果您想要在源代码中声明的

  1. ,请使用Field.getGenericType() .

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67982754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档