我有2个课程:B
扩展A
。
我在课程getDeclaratedFields()
上使用B
,但我没有从“A”类中获取字段。
我怎样才能得到它们?
答案 0 :(得分:1)
getDeclaredFields()返回由类声明的字段,而不是超类。
返回反映声明的所有字段的Field对象数组 由此Class对象表示的类或接口。这个 包括公共,受保护,默认(包)访问和私有 字段,但不包括继承的字段。
使用getFields方法检索由类和超类声明的字段。
具体来说,如果此Class对象表示一个类,则此方法 返回此类及其所有超类的公共字段
阅读Java Class了解详情。
答案 1 :(得分: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