Получить копию списка, используя отражение - PullRequest
0 голосов
/ 03 февраля 2011

У меня есть объект, который содержит список других объектов. Скажем так:

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 ]

2 голосов
/ 03 февраля 2011

Разве вы не вызываете Field.get (obj), передавая объект, из которого нужно получить значение? Другими словами,

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

f - это поле "keys" в вашем случае, поэтому f.get (keychain) эквивалентно keychain.keys.

0 голосов
/ 03 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...