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

Java 如何获取属性名而不是属性值?,java,reflection,properties,Java,Reflection,Properties,我有这门课: public class Person { private String name; private int age; } 我想制作一个Excel文件,在我将这些值放入Excel表之前,我需要将名称和年龄作为表中的列。我只需要知道如何获取属性名(而不是值) 例如,如果我有: name=“Marc” 年龄=26 我想先得到“姓名”和“年龄”,而不是“马克”和“26岁”。我该怎么做 需要明确的是,属性的名称和数量可能会有所不同,所以我不能硬编码“name”和“ag

我有这门课:

public class Person {

    private String name;
    private int age;

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

例如,如果我有:

name=“Marc”
年龄=26

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

需要明确的是,属性的名称和数量可能会有所不同,所以我不能硬编码“name”和“age”,我需要某种方法来迭代并获取它。我知道如何迭代并将其放入工作表中。我所需要的帮助就是如何获取属性名


我得到的最接近的字段是getDeclaredFields(),但是我不能再进一步了,因为我无法从该字段类型中获得任何信息。

您的思路是正确的
getDeclaredFields()
返回一个
字段[]
。在这个数组上迭代并访问每个
字段上的
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);
    }
}

Person.class.getDeclaredFields()


它重新运行字段[],您可以获取每个字段的信息。

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

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

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

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

如果您不必按原样使用该类,并且为了避免使用反射,我建议您使用HashMap,这样您就可以添加键值元素。这样,您将拥有对名称和值的“合法”访问权。例如,您可以映射.put(“name”、“George”);然后你想怎么用就怎么用。您可以在此处查看详细信息

您可能还需要设置
字段。setAccessible(true)@Lino好的观点,我将在中编辑它。