从ArrayList <myobject> </myobject>获取MyObject的字段

时间:2013-04-21 23:40:45

标签: java reflection

我有2个课程,AB。 A类有一些字段,其中一个是ArrayList<B>。现在,B有一些自己的字段(其类型和内容与问题无关)

我知道如何获取A的字段并显示其值,但我无法找到一个解决方案,使我能够从{B获取ArrayList<B>的字段{1}}中声明了{1}}。

基本上,我正在尝试打印每个A的内容,包括A的内容。按内容我的意思是成对的属性/字段。

假设我对ArrayList<B>A ---&gt;一无所知。我必须写一些非常通用的东西。在我遇到前面描述的问题之前,管理它使用反射工作。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

出了什么问题:

final A a = new A();
for (final Field f : a.getClass().getDeclaredFields()) {
    f.setAccessible(true);
    System.out.println(f.get(a));
}

这将遍历A中的所有字段并打印内容。 List有一个很好的toString方法,所以你只需要在B中使用toString方法,它应该可以正常工作。

如果由于某种原因你不能这样做,那么递归就行了。这很危险,因为除非你知道BA处没有引用,否则你将陷入无限循环。

void printMethods(final Object input) {
    for (final Field f : input.getClass().getDeclaredFields()) {
        f.setAccessible(true);
        if (Collection.class.isAssignableFrom(f.getType())) {
            final Collection<?> c = (Collection<?>) f.get(input);
            for (final Object obj : c) {
                printMethods(obj);
            }
        } else {
            System.out.println(f.get(input));
        }
    }
}

答案 1 :(得分:0)

这很简单:

"Bs: " + a.bList();

B也应该覆盖toString()