通过反射获取子类字段



我有两个类: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

相关内容

  • 没有找到相关文章

最新更新