我有两个类:B
扩展A
。
我在B
类上使用getDeclaratedFields()
,并且我没有从类a中获得字段。
我怎样才能得到它们?
getDeclaredFields()返回由类而不是父类声明的字段。
返回一个反映所有声明字段的Field对象数组由这个类对象表示的类或接口。这包括公共、受保护、默认(包)访问和私有访问字段,但不包括继承字段。
使用getFields方法检索类和超类声明的字段。
具体来说,如果这个Class对象表示一个类,这个方法返回该类及其所有超类的公共字段
你应该使用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