如何获得所有字段以及Composite对象的值?

时间:2013-04-01 10:44:09

标签: java reflection

我面临的问题是通过反思获得一个类的所有字段的值。

我有一个类可以有任意数量的字段,任意数量的类和那些类依次可以有任意数量的字段,如下所示

public class A{
    String string;
    int number;
    HashMap<String,String> map;
    B bclass;
}

B以上也是A类的成员。

  1. 我想获取 String 类型的字段及其值,如果字段为class
  2. 如果字段再次为 Class ,则获取字段和值,例如 map 属性类型为 HashMap 类类型然后我需要属性为字符串的键属性和值属性。
  3. 请参阅我的代码段以解决上述问题

    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);
        }
    }
    

    但不幸的是,它不起作用,请帮助我。

1 个答案:

答案 0 :(得分:0)

当你经过时,

extractStringFields(field);

它正在发送一个Field对象。所以当第二次调用时,object.getClass会给你Field.class。为此你永远不会得到适当的价值。
更好地保留另一个重载类,你在那里传递Field。在那种方法中你可以写这个,

for (Field field : field.getType().getDeclaredFields())

希望这会给你一个良好的开端。

或者你可以使用它:

if(value != null){
                extractStringFields(value);
            }