1

我有 2 个课程:Bextends A

getDeclaratedFields()在 class 上使用B,我没有从 `A.

我怎样才能得到它们?

4

2 回答 2

1

getDeclaredFields() 返回由类而不是超类声明的字段。

返回一个 Field 对象数组,反映由此 Class 对象表示的类或接口声明的所有字段。这包括公共、受保护、默认(包)访问和私有字段,但不包括继承的字段。

使用 getFields 方法检索类和超类声明的字段。

具体来说,如果此 Class 对象表示一个类,则此方法返回该类及其所有超类的公共字段

阅读Java 类以获取更多信息。

于 2013-05-27T10:58:48.153 回答
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
于 2013-05-27T11:04:37.797 回答