Получение полей класса - PullRequest
1 голос
/ 30 марта 2012
Field[] fields = <class name>.getClass().getDecdlaredFields();
for(Field field: fields) {
     String fieldName = field.getName();
     log.info(" Fieldname : "+ fieldName);
}

Это дает мне имя конструкторов со случайными символами вроде этого:

CGLIB$getPTI$25
CGLIB$setPTI$26

Этот класс на самом деле является классом отображения спящего режима. Он отображает данные из базы данных.

Ответы [ 2 ]

3 голосов
/ 30 марта 2012

Они не случайные символы. Это поля, объявленные соответствующим классом, который предположительно генерируется автоматически. Обычно (даже поощряется JLS) использовать $ в машинно-генерируемом коде.

Обратите внимание, что CGLIB - это библиотека генерации кода, которая, вероятно, и создает класс здесь.

Теперь, если вы думали, что смотрите на один из ваших классов, вы не ... вы смотрите на подкласс, созданный на лету Hibernate. Распечатайте foo.getClass().getName() чтобы увидеть это. Если вы пытаетесь найти поля, объявленные в вашего класса, вам нужно пройти вверх по иерархии наследования, пока вы не достигнете своего класса. (Посмотрите, на что похожи сгенерированные классы, чтобы увидеть, как определить, когда вы добрались до своего реального.)

0 голосов
/ 30 марта 2012

Это тебе поможет ....

String className = your_class_name;
Class<?> objectClass = Class.forName(className);    
Field [] fieldsObjs = objectClass.getDeclaredFields();

for(int i=0;i<fieldsObjs.length;i++){
      system.out.println("className : " + fieldsObjs[i].getName());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...