Java Reflection - 获取类的所有实例变量名称

时间:2010-11-05 01:06:58

标签: java android json reflection

我正在编写一个Android应用程序,需要将JSON对象绑定到域实体,并使用JSON中的键作为实例变量。由于有几个域实体,每个域实体都有不同的实例变量,JSON需要在应用程序中绑定它们,我想写一个方法如下:

  1. 遍历域中的所有实例变量
  2. 如果JSON中存在具有实例变量名称的密钥,请从JSON中获取此密钥的值,并使用此密钥名称设置Domain的实例变量等于此值。
  3. 我对从类到JSON的绑定感兴趣的原因是因为如果JSON由于某种原因而发生更改,我不希望它在实例变量不存在时打破应用程序应用程序的域名,用于特定的JSON密钥。

    提前感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

很可能你想使用一个为你做这件事的json库。 Jackson是一个很好的,也是由Spring MVC使用的。

要回答您的问题,您可以在课堂上使用getDeclaredFields(),并使用java.lang.reflect.Modifier.isStatic()检查该字段是否为静态。

private static class Foo {
    private static long car;
    private int bar;
    private String baz;
}

public static void main(String[] args) {
    for (Field field : Foo.class.getDeclaredFields()) {
        if (!Modifier.isStatic(field.getModifiers())) {
            System.out.println("Found non-static field: " + field.getName());                
        }
    }
}

这将打印出来:

Found non-static field: bar
Found non-static field: baz

答案 1 :(得分:0)

oksayt's answer是正确的,但我会带着一点点盐。并非每个字段都包含应该公开显示的属性。使用的机制是Java Bean Introspector。您可以使用我之前的问题的答案作为参考:

其他参考: