【问题标题】:How do I get a property name instead of a property value? [duplicate]如何获取属性名称而不是属性值? [复制]
【发布时间】:2020-10-05 19:15:18
【问题描述】:

我有这门课:

public class Person {

    private String name;
    private int age;

}

我想制作一个 Excel 文件,在将值放入 Excel 工作表之前,我需要将姓名和年龄作为工作表中的列。我只需要知道如何获取属性名称(而不是值)。

例如,如果我有:

name="马克"
年龄= 26

我想先获取“姓名”和“年龄”,而不是“马克”和 26。我该怎么做?

为了清楚起见,属性的名称和数量可能会有所不同,因此我无法对“名称”和“年龄”进行硬编码,我需要一些方法来迭代并获取它。我知道如何迭代并将其放入工作表中。我需要帮助的只是如何获取属性名称。

我得到的最接近的是 getDeclaredFields(),但我无法更进一步,因为我无法从该 Field 类型中得到任何东西。

【问题讨论】:

    标签: java reflection properties


    【解决方案1】:

    您可以获取字段名称。这是一个例子:

    Field[] allFields = Person.class.getDeclaredFields();
    for(Field f:allFields) 
        System.out.println(f.getName());
    

    【讨论】:

      【解决方案2】:

      你在正确的轨道上。 getDeclaredFields() 返回 Field[]。遍历这个数组并访问每个Field 上的getName() 方法应该可以解决问题。

      使用您的示例:

      Person p = new Person();
      Field[] fields = Person.class.getDeclaredFields();
      for (Field field : fields) {
          boolean accessible = field.isAccessible();
          try {
              field.setAccessible(true);
              System.out.println(field.getName() + " - " + field.get(p));
          } catch (IllegalAccessException e) {
              e.printStackTrace();
          } finally {
              field.setAccessible(accessible);
          }
      }
      

      【讨论】:

      • 你可能还需要设置field.setAccessible(true);
      • @Lino 好点,我会编辑它。
      【解决方案3】:

      Person.class.getDeclaredFields()

      它重新调整 Field[],您可以获得每个 Field 的信息。

      【讨论】:

        【解决方案4】:

        这应该可以正常工作。稍后您可以使用字段数组的索引进行迭代来存储/写入数据。

        Field[] fields = YourClassName.class.getFields();
        

        【讨论】:

          【解决方案5】:

          如果你不是一定要按原样使用类,并且为了避免使用反射,我建议你使用 HashMap,这样你就可以添加键值元素。这样您就可以“合法”地访问名称和值。例如,您可以 map.put("name", "George");然后随意使用它们。您可以在这里查看详细信息https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-03-07
            • 2012-05-06
            • 2017-12-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多