0

リフレクションによってクラスのすべてのフィールドの値を取得するという問題に直面しています。

以下のように、任意の数のフィールド、任意の数のクラスを持つことができる 1 つのクラスがあり、それらのクラスは任意の数のフィールドを持つことができます。

public class A{
    String string;
    int number;
    HashMap<String,String> map;
    B bclass;
}

上記の B は、クラス A のクラス メンバーです。

  1. String型のフィールドとその値を取得したいのですが、フィールドがクラスの場合
  2. フィールドが再びクラスの場合、フィールドと値を取得します。たとえば、マッププロパティがHashMapクラス タイプの場合、文字列タイプのキー プロパティと値プロパティの両方が必要です。

上記の問題を解決するには、私のコード スニペットを参照してください

private void extractStringFields(Object object) throws IllegalAccessException {
    for (Field field : object.getClass().getDeclaredFields()) {

        field.setAccessible(true);
        System.out.println("filesd : "+field.getName());
        Object value = field.get(object);

        if (field.getType().equals(String.class)) {
            System.out.println(field.getName() + "=" + value);
        }
        extractStringFields(field);
    }
}

しかし、残念ながら、それは機能していません。助けてください。

4

1 に答える 1

0

通り過ぎるときは、

extractStringFields(field);

Field オブジェクトを送信しています。したがって、2 回目の呼び出し以降は object.getClass で Field.class が返されます。これでは、適切な値が得られません。
別のオーバーロードされたクラスを保持することをお勧めします。そこに Field を渡します。そのメソッドでは、これを書くことができます、

for (Field field : field.getType().getDeclaredFields())

これにより、有利なスタートが切れることを願っています。

またはこれを使用できます:

if(value != null){
                extractStringFields(value);
            }
于 2013-04-01T11:07:06.850 に答える