我面临的问题是通过反射获得类的所有字段的值。
我有一个类,它可以有任意数量的字段,任意数量的类而这些类又可以有任意数量的字段,就像下面的
public class A{
String string;
int number;
HashMap<String,String> map;
B bclass;
}
B上面又是a类的类成员
- 我想获得类型的字段字符串和它们的值,如果字段是类
- 如果字段是类再次,然后获得字段和值,例如,map属性是类型HashMap类类型,那么我需要的键和值属性是String类型。
请参阅我的代码片段来解决上述问题
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);
}
}
但不幸的是,它不起作用,请帮帮我。 当你经过时,
extractStringFields(field);
它正在发送一个Field对象。所以当第二次调用forward对象时。getClass会给你Field.class。对于这个,你永远不会得到合适的值。
最好保留另一个重载类,把Field传递到那里。在这个方法中,你可以这样写,
for (Field field : field.getType().getDeclaredFields())
希望这会给你一个好的开始。
或者你可以这样写:
if(value != null){
extractStringFields(value);
}