【发布时间】:2013-04-24 03:22:28
【问题描述】:
我正在做大学项目。
我需要从课堂上获取所有字段。甚至私人和继承。我试图获取所有声明的字段,然后转换为超类并重复。
我的代码片段:
private void listAllFields(Object obj) {
List<Field> fieldList = new ArrayList<Field>();
while (obj != null) {
fieldList.addAll(Arrays.asList(obj.getClass().getDeclaredFields()));
obj = obj.getClass().getSuperclass().cast(obj);
}
// rest of code
但它不起作用。 tmpObj 转换后仍然是同一个类(不是超类)。
我将不胜感激如何解决投射问题或如何以不同方式检索这些字段。
问题不是获取字段的访问权限,而是获取字段的名称!
我就是这样管理的:
private void listAllFields(Object obj) {
List<Field> fieldList = new ArrayList<Field>();
Class tmpClass = obj.getClass();
while (tmpClass != null) {
fieldList.addAll(Arrays.asList(tmpClass .getDeclaredFields()));
tmpClass = tmpClass .getSuperclass();
}
// rest of code
【问题讨论】:
-
要获取所有继承的字段,必须使用递归,如here所述
-
@DmitryKuskov 您不能在 cmets 中使用该符号。你必须使用
[label](url)。
标签: java reflection