我上了这个课:
public class Person {
private String name;
private int age;
}
我想制作一个Excel文件,在将值放入Excel工作表之前,我需要名称和年龄作为工作表中的列。我需要知道的是如何获取属性名称(而不是值)。
例如,如果我有:
name =“马克”
年龄= 26
我想先获得“姓名”和“年龄”,而不是“马克”和26。我该怎么做?
请明确一点,属性的名称和数量可能会有所不同,因此我无法对“名称”和“年龄”进行硬编码,我需要一些方法来进行迭代并获取它。我知道如何进行迭代并将其放入工作表中。我需要帮助的是如何获取属性名称。
我最接近的是getDeclaredFields(),但是我无法走得更远,因为我无法从该字段类型中获得任何东西。
答案 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
查看详细信息