Можно ли перебрать членов классов в Java? - PullRequest
8 голосов
/ 31 октября 2009

У меня есть DTO, в котором есть целая группа членов. Мне было интересно, если Java поддерживает идею для (в) для класса. Я не думаю, что это так, но это спасло бы меня от печали, если бы это произошло, поэтому я решил, что брошу вопрос там.

Ответы [ 5 ]

26 голосов
/ 31 октября 2009

Ну, вы можете сделать это с отражением:

for (Field field : clazz.getFields())
{
    ...
}

(или эквивалент для методов и т. Д.)

Затем вы можете получить значения полей для конкретного экземпляра или статические значения.

7 голосов
/ 31 октября 2009

Да, немного хлопотно.

Вы должны использовать отражение.

См .: Class.getDeclaredFieds ()

Возвращает массив объектов Field, отражающих все поля, объявленные классом или интерфейсом, представленным этим объектом Class

Вы можете увидеть пример здесь

Существует три способа получения объекта Field из объекта Class.

 Class cls = java.awt.Point.class;

 // By obtaining a list of all declared fields.
 Field[] fields = cls.getDeclaredFields();

 // By obtaining a list of all public fields, 
 // both declared and inherited.
 fields = cls.getFields();
 for (int i=0; i<fields.length; i++) {
   Class type = fields[i].getType();
   process(fields[i]);
 }

 // By obtaining a particular Field object.
 // This example retrieves java.awt.Point.x.
 try {
   Field field = cls.getField("x");
   process(field);
   } catch (NoSuchFieldException e) {
 }

См. Определение класса Class для дополнительных опций.

4 голосов
/ 31 октября 2009

Да, используйте Reflection API . В частности, проверьте методы getFields и getMethods из Class.

0 голосов
/ 31 октября 2009

Взгляните на структуру отражения, благодаря которой вы можете исследовать класс для получения этой информации.

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/package-summary.html

0 голосов
/ 31 октября 2009

Вы можете использовать отражение, чтобы получить все члены и функции.

Может быть, вам нужно спросить себя, почему в этом DTO так много членов, что вы считаете это необходимым. Может быть, пришло время для рефакторинга.

...