1
A
回答
1
getDeclaredFields()返回由類而不是超類聲明的字段。
返回一個Field對象數組,該對象數組反映了由此Class對象表示的類或接口聲明的所有字段 。這 包括公共,受保護,默認(包)訪問和專用 字段,但不包括繼承字段。
使用getFields方法檢索由類和超類聲明的字段。
具體地,如果該Class對象表示一個類,則此方法返回 這個類的公共字段和它的所有超
讀Java Class以獲取更多信息的。
0
您應該使用Class#getSuperclass()訪問類的超類,並使用Class#getDeclaredFields()獲取其字段,重複(遞歸)直到您到達Object或您希望停止的選擇類。
下面是一些示例代碼:
@Test
public void getDeclFieldsIncludingBase() {
List<Field> fields = new ArrayList<>();
getDeclFieldsIncludingBase(B.class, fields);
for(Field f : fields) {
System.out.println(f.getName());
}
}
private void getDeclFieldsIncludingBase(Class<?> cl, List<Field> fields) {
Field[] declaredFields = cl.getDeclaredFields();
for(Field f : declaredFields) {
fields.add(f);
}
Class<?> superclass = cl.getSuperclass();
if(! Object.class.equals(superclass)) {
getDeclFieldsIncludingBase(superclass, fields);
}
}
實施例:
public class A {
int a;
}
和
public class B extends A {
int b;
}
輸出應該
b
a
相關問題
- 1. 在運行時通過反射獲取通用字段類型
- 2. 反射通用獲取字段值
- 3. 如何在支持字段存在時通過反射來獲取類字段?
- 4. 使用反射獲取使用超類的子類字段?
- 5. 通過反射獲取XmlRootAttribute.ElementName
- 6. 通過反射獲取Java字段,但不是通過字符串名稱獲取Java字段
- 7. 如何通過反射獲取對象中的字段?
- 8. 無法通過反射來獲取字段值hibernate JPA + GF 4
- 9. 獲取與註釋,字段列表通過使用反射
- 10. 通過具有反射C的屬性獲取私有字段#
- 11. 如何通過反射屬性獲取變量/字段名稱?
- 12. Java反射 - 通過類名稱字符串獲取級別
- 13. 通過反射投射字段到Java中的數組類型
- 14. 通過C#中的反射獲取對某些類字段的引用
- 15. 通過反射獲取特定的公共字段(對於所有父類)
- 16. 使用反射獲取字段值
- 17. 通過反射獲取陰影方法
- 18. 通過反射獲取事件參數
- 19. 通過反射獲取接口屬性
- 20. Java通過反射獲取參數值
- 21. 通過反射獲取在PHP
- 22. ObservableArrayList:如何通過反射獲取通用類型?
- 23. 如何通過反射獲得類的私有字段及其父類?
- 24. 通過反射獲取.Net對應類型的C#類型
- 25. C#反射類字段
- 26. 獲得通過反射
- 27. 獲得通過反射
- 28. 通過反射修改不可變的scala類字段
- 29. 如何通過使用反射的方法傳遞類字段
- 30. Java。如何通過反射獲得不可空字段?
請分享您用於從poi導出的代碼。很有可能你沒有關閉相同的東西。 – Joe2013 2013-03-11 09:14:49
分享一些代碼會給更好的主意 – 2013-03-11 13:12:13
文件是否保存爲只讀?工作表是否受到保護以禁止此類修改? – shahkalpesh 2013-03-11 15:43:48