2011-02-02 3 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이 표시됩니다.

관련 문제