0

我面临的问题是通过反射来获取类的所有字段的值。

我有一个类可以有任意数量的字段,任意数量的类,而这些类又可以有任意数量的字段,如下所示

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

B 以上又是 A 类的类成员。

  1. 我想获取字符串类型的字段及其值,如果字段是类
  2. 如果 field 再次是Class,则获取 fields 和 values ,例如map属性是HashMap类类型,那么我需要String类型的 key 和 value 属性。

请查看我的代码片段以解决上述问题

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

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

4

1 回答 1

0

路过的时候,

extractStringFields(field);

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

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

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

或者你可以使用这个:

if(value != null){
                extractStringFields(value);
            }
于 2013-04-01T11:07:06.850 回答