Можно ли перебрать членов классов в Java?

StackOverflow https://stackoverflow.com/questions/1652525

  •  22-07-2019
  •  | 
  •  

Вопрос

У меня есть 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top