Можно ли перебрать членов классов в Java?
Вопрос
У меня есть DTO, в котором есть целая группа участников. Мне было интересно, если Java поддерживает идею для (в) для класса. Я не думаю, что это так, но это спасло бы меня от печали, если бы это произошло, поэтому я решил, что брошу вопрос там.
Решение
Ну, вы можете сделать это с отражением:
for (Field field : clazz.getFields())
{
...
}
(или эквивалент для методов и т. д.)
Затем вы можете получить значения полей для конкретного экземпляра или статические значения.
Другие советы
Да, немного хлопотно.
Вы должны использовать отражение.
См .: 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) {
}
См. класс . определение дополнительных опций.
Да, используйте API отражения . В частности, проверьте методы getFields
и getMethods
из Class
.
Вы можете использовать отражение, чтобы получить все члены и функции. Р>
Может быть, вам нужно спросить себя, почему в DTO так много членов, что вы считаете это необходимым. Возможно, пришло время провести рефакторинг.
Взгляните на структуру отражения, благодаря которой вы можете исследовать класс на предмет этой информации.
http: / /java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/package-summary.html р>