【问题标题】:Introspection on the Object to print attribute [closed]对要打印属性的对象的自省[关闭]
【发布时间】:2012-10-09 09:46:29
【问题描述】:

我抓到了这段代码:

ClassABC abc = new ClassABC();
for (Field field : abc.getClass().getDeclaredFields()) {
    field.setAccessible(true);
    String name = field.getName();
    Object value = field.get(abc);
    System.out.printf("Field name: %s, Field value: %s%n", name, value);
}

from this question

但是我想要一些东西来从活动对象而不是类中获取属性。我知道我需要自省我只是不知道如何从活动对象中获取。

【问题讨论】:

    标签: java reflection introspection


    【解决方案1】:

    这个:

    Object value = field.get(abc);
    

    从 abc 引用的实例化对象中获取值。

    您只能自省类,然后使用提供的字段和方法与实例化的对象进行交互。

    【讨论】:

      【解决方案2】:

      类有属性/属性,对象是一个状态,它只有这些属性的值。

      ClassABC abc = new ClassABC();
      

      您在上面的声明中创建了 ClassABC 类的对象。

      Object value = field.get(abc);
      

      field.get(abc) 将返回对象abc 的字段值。这样您就可以在运行时对 Object 的属性值进行自省。

      #Field.get()

      返回指定对象上此字段表示的字段的值。如果该值具有原始类型,则该值会自动包装在对象中。

      【讨论】:

        【解决方案3】:

        但是我想要一些东西来从活动对象而不是类中获取属性。

        “活动”对象是某个类的实例,该类将确定该对象具有哪些字段。您问题中的代码完全符合您的要求。

        (Java 不允许您在运行中向对象添加新字段/属性...例如 Javascript、Python、Ruby 等语言。)

        【讨论】:

          猜你喜欢
          • 2020-01-02
          • 2012-02-23
          • 2013-07-30
          • 2019-05-04
          • 1970-01-01
          • 2016-02-05
          • 2016-07-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多