Получение полей через отражение - PullRequest
0 голосов
/ 01 декабря 2011

У меня есть объект, который был упакован, поэтому всякий раз, когда я делаю следующее:

        Field[] fields = builder.getClass().getDeclaredFields(); 

        String s = "";
        for(Field f : fields)
        {
            s+= " " + f.getName();
        }

Я получаю поля, которых нет в моем классе.Если я хочу изменить поле, которое было обернуто, возможно ли это сделать с помощью отражения?

Спасибо

edit: да, я вызвал его на развернутом объекте.Извините - это был длинный день: /

Ответы [ 3 ]

0 голосов
/ 01 декабря 2011

Вы имеете в виду изменить значение поля? Вы могли бы позвонить f.set(builder, <value>). не уверен, что вы подразумеваете под обернутым объектом, возможно, вы захотите развернуть его перед тем, как выполнить магию «Отражение»

0 голосов
/ 01 декабря 2011

Во-первых, вы можете использовать YourClass.getDeclaredFields() вместо попытки доступа к полям с использованием объекта builder: builder.getClass().getDeclaredFields();

Во-вторых, если ваш класс упакован в другой класс, это означает, что внешний объект содержит ссылкувнутренний (надеюсь, ваш).Таким образом, вы должны обнаружить внешний объект, чтобы увидеть, какие поля у него есть и какое поле содержит ссылку на ваш внутренний объект.Затем позвоните inner =outer.getField("theFiledName").getValue(builder).

Теперь вы можете использовать inner точно так же, как вы пытались в своем фрагменте кода.

0 голосов
/ 01 декабря 2011

Я предполагаю, builder.getClass() возвращает неправильный класс. Возможно, вам придется поискать обернутый объект и вызвать на нем getClass() или - если вы можете изменить конструктор - предоставить метод для получения класса обернутого объекта.

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