1

私は2つのクラスを取得しました:Bextends A

私はgetDeclaratedFields()クラスBで使用していますが、クラス`Aからフィールドを取得していません。

どうすれば入手できますか?

4

2 に答える 2

1

getDeclaredFields()は、スーパークラスではなくクラスによって宣言されたフィールドを返します。

このClassオブジェクトによって表されるクラスまたはインターフェイスによって宣言されたすべてのフィールドを反映するFieldオブジェクトの配列を返します。これには、パブリック、保護、デフォルト(パッケージ)アクセス、およびプライベートフィールドが含まれますが、継承されたフィールドは除外されます。

getFieldsメソッドを使用して、クラスおよびスーパークラスによって宣言されたフィールドを取得します。

具体的には、このClassオブジェクトがクラスを表す場合、このメソッドはこのクラスとそのすべてのスーパークラスのパブリックフィールドを返します。

詳細については、 Javaクラスをお読みください。

于 2013-05-27T10:58:48.153 に答える
0

Class#getSuperclass()を使用してクラスのスーパークラスにアクセスし、Class#getDeclaredFields()を使用してそのフィールドも取得し、オブジェクトまたは停止する選択したクラスに到達するまで(再帰的に)繰り返します。

サンプルコードは次のとおりです。

@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 に答える