Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > java reflection get values from private class


Автор: 4epT 17.12.2012, 14:19
Здравствуйте! Имеется класс, у которого поле является объектом приватного  класса (который объявлен рядом с этим).

Код

public class P extends BaseP {
private InnerP p;
}

class InnerP {

private String s1;
private String s2;
private String s3;
private String s4;

}


Как через reflection вытащить значение s1, s2... ?

Пробовал вот так:
Код

Field p = object.getClass().getDeclaredField("p");

for(Field field : p.getType().getDeclaredFields()){

field.setAccessible(true);

String value = (String)field.get(object);
}


Получаю эксепшен

Автор: LSD 17.12.2012, 14:32
А о том, что это за эксепшн нам предстоит догадаться самим, так?

Автор: 4epT 17.12.2012, 15:31
Извиняюсь. Вот эксепшен:

Код

Can not set java.lang.String field InnerP.s1 to P

Автор: LSD 17.12.2012, 16:21
Ты не с тем объектом вызываешь get().
Код

        Field fieldP = object.getClass().getDeclaredField("p");
        Object valueP = fieldP.get(object);
        for (Field field : fieldP.getType().getDeclaredFields()) {
            field.setAccessible(true);
            String value = (String) field.get(valueP);
            logger.info("{} => {}", field.getName(), value);
        }

Автор: 4epT 17.12.2012, 16:32
Да, точно. Спасибо большое.

И еще один вопрос по поводу рефлексии. Возникла идея, написать свои аннотации, которые будут учавствовать в валидации объектов. Объекты достаточно большие, много наследований и реализаций интерфейсов, возможно ли будет сделать какой то автоматизированный класс, который будет валидировать любые объекты ? И как вообще  reflection сказывается на производительности ?

p.s. Может быть есть уже какие нибудт готовый реализации такого ?

Автор: LSD 17.12.2012, 16:46
Цитата(4epT @  17.12.2012,  17:32 Найти цитируемый пост)
Может быть есть уже какие нибудт готовый реализации такого ?

Посмотри http://code.google.com/p/cofoja/.

Автор: 4epT 17.12.2012, 16:55
Цитата(LSD @ 17.12.2012,  16:46)
Посмотри http://code.google.com/p/cofoja/.

Как то слишком запутанно ...

Автор: mbasil 21.12.2012, 08:35
Это похоже на стандарт: http://www.hibernate.org/subprojects/validator.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)