如何获取属性名称而不是属性值?

时间:2020-06-16 08:23:30

标签: java reflection properties

我上了这个课:

public class Person {

    private String name;
    private int age;

}

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

例如,如果我有:

name =“马克”
年龄= 26

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

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

我最接近的是getDeclaredFields(),但是我无法走得更远,因为我无法从该字段类型中获得任何东西。

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

以您的示例为例:

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

答案 2 :(得分:1)

Person.class.getDeclaredFields()

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

如果您不必按原样使用该类,并且为了避免使用反射,建议您使用HashMap,以便可以添加键值元素。这样,您将可以“合法”访问名称和值。例如,您可以map.put(“ name”,“ George”);然后随便使用它们。您可以在这里https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

查看详细信息
相关问题