-1

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

我知道如何获取 , 的字段A并显示它们的值,但我一直无法找到一种解决方案,使我也能够BArrayList<B>声明的 in 中获取 , 的字段A

基本上,我正在尝试打印每个A的内容,包括ArrayList<B>. 内容是指成对的属性/字段。

假设我对此一无所知A并且B---> 我必须写一些非常通用的东西。设法使用反射使其工作,直到我遇到前面描述的问题。

有任何想法吗?

4

2 回答 2

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方法,所以你只需要toString在 B 中有一个方法,它应该可以正常工作。

如果由于某种原因你不能这样做,那么递归就会起作用。然而,这很危险,除非您知道某处B没有引用,否则您A将陷入无限循环。

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));
        }
    }
}
于 2013-04-21T23:48:27.657 回答
0

这很简单:

"Bs: " + a.bList();

toString()B也应该覆盖

于 2013-04-21T23:47:44.520 回答