2011-02-02 21 views
0

私は他のオブジェクトのリストを含むオブジェクトを持っています。次のように言う:反射を使用してリストのコピーを取得する

class Keychain { 
    public List<Object> keys = new ArrayList<Object>(); 
} 

class Key { 
    public String name; 
} 

私は(この場合はキーチェーンに)クラスで利用可能なすべてのフィールドの配列を取得し、任意のは、リストのインスタンスかどうかを確認します。もしそうなら、私はそのリストのコピーをつかみ、データを操作したいと思う。私は、リスト内の正確なクラスがどうなるか分からないやっている何のため

for(Field f : keychain.getFields()){ 
    if(f.getType() == List.class){ 
     List<Object> keys = f.getObject(new ArrayList<Object>); 
     // IllegalArgumentException thrown... 
    } 
} 

、私が知っている唯一のことは、それの親クラスがなる人です。

答えて

2

Field.get(obj)を呼び出して、値を取得するオブジェクトを渡していませんか?言い換えれば、

List<Object> keys = f.get(keychain); 

fはそうf.get(キーチェーン)、あなたのケースでは、「キー」フィールドでkeychain.keysに相当します。

0

FieldのjavadocでField.getObject()メソッドが表示されませんでした。これはField.get()であるはずですか?その場合、fKeyChainクラスのフィールドを指定します。 get()でフィールドの値を取得するには、フィールド値を取得するインスタンスを指定する必要があります。指定した引数がKeychainのインスタンスではないため、IllegalArgumentExceptionが表示されています。

関連する問題