2011-02-02 2 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.get (брелка) эквивалентно keychain.keys.

0

Я не видел метод Field.getObject() в javadoc для Field. Предполагалось, что это должно быть Field.get()? Если это так, f указывает поле класса KeyChain. Чтобы получить значение поля через get(), вы должны указать экземпляр, значение поля которого вы хотите получить. Вы получаете IllegalArgumentException, потому что аргумент, который вы предоставили, не был экземпляром Keychain.

Смежные вопросы