我有2个课程,A
和B
。 A类有一些字段,其中一个是ArrayList<B>
。现在,B
有一些自己的字段(其类型和内容与问题无关)
我知道如何获取A
的字段并显示其值,但我无法找到一个解决方案,使我能够从{B
获取ArrayList<B>
的字段{1}}中声明了{1}}。
基本上,我正在尝试打印每个A
的内容,包括A
的内容。按内容我的意思是成对的属性/字段。
假设我对ArrayList<B>
和A
---&gt;一无所知。我必须写一些非常通用的东西。在我遇到前面描述的问题之前,管理它使用反射工作。
有什么想法吗?
答案 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
方法,它应该可以正常工作。
如果由于某种原因你不能这样做,那么递归就行了。这很危险,因为除非你知道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));
}
}
}
答案 1 :(得分:0)
这很简单:
"Bs: " + a.bList();
B也应该覆盖toString()