我面临的问题是通过反思获得一个类的所有字段的值。
我有一个类可以有任意数量的字段,任意数量的类和那些类依次可以有任意数量的字段,如下所示
public class A{
String string;
int number;
HashMap<String,String> map;
B bclass;
}
B以上也是A类的成员。
请参阅我的代码段以解决上述问题
private void extractStringFields(Object object) throws IllegalAccessException {
for (Field field : object.getClass().getDeclaredFields()) {
field.setAccessible(true);
System.out.println("filesd : "+field.getName());
Object value = field.get(object);
if (field.getType().equals(String.class)) {
System.out.println(field.getName() + "=" + value);
}
extractStringFields(field);
}
}
但不幸的是,它不起作用,请帮助我。
答案 0 :(得分:0)
当你经过时,
extractStringFields(field);
它正在发送一个Field对象。所以当第二次调用时,object.getClass会给你Field.class。为此你永远不会得到适当的价值。
更好地保留另一个重载类,你在那里传递Field。在那种方法中你可以写这个,
for (Field field : field.getType().getDeclaredFields())
希望这会给你一个良好的开端。
或者你可以使用它:
if(value != null){
extractStringFields(value);
}