【问题标题】:Java Reflection - Get all instance variable names of a classJava Reflection - 获取类的所有实例变量名称
【发布时间】:2010-11-05 01:06:58
【问题描述】:

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

  1. 遍历域中的所有实例变量
  2. 如果 JSON 中存在具有实例变量名称的键,则从 JSON 中获取此键的值,并将具有此键名称的域的实例变量设置为等于此值。

我对将类绑定到 JSON 感兴趣的原因是,如果 JSON 因某种原因发生更改,我不希望它在实例变量不存在时破坏应用程序特定 JSON 密钥的应用程序域。

提前感谢您的帮助!

【问题讨论】:

    标签: java android json reflection


    【解决方案1】:

    您很可能希望使用 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
    

    【讨论】:

      【解决方案2】:

      oksayt's answer 是正确的,但我会持保留态度。并非每个字段都拥有应该公开的属性。使用的机制是 Java Beans Introspector。您可以参考我对这些先前问题的回答:

      其他参考:

      【讨论】:

        猜你喜欢
        • 2012-03-18
        • 2014-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-14
        • 1970-01-01
        • 2011-01-14
        相关资源
        最近更新 更多