public Field[] getFields() throws SecurityException
Повертає масив, що містить об'єкти Field, що відображають усі доступні загальнодоступні поля класу або інтерфейсу, представлені цим об'єктом Class. Елементи в масиві, що повертається, не сортуються і не є в якомусь конкретному порядку. Цей метод повертає масив довжиною 0, якщо клас або інтерфейс не мають доступних загальнодоступних полів або якщо він представляє клас масиву, примітивний тип або недійсний.
Зокрема, якщо цей об’єкт Class представляє клас, цей метод повертає загальнодоступні поля цього класу та всі його суперкласи. Якщо цей об'єкт Class представляє інтерфейс, цей метод повертає поля цього інтерфейсу та всі його суперінтерфейси.
Поле неявної довжини для класу масиву не відображається цим методом. Код користувача повинен використовувати методи класу Array для маніпулювання масивами.
public Field[] getDeclaredFields() throws SecurityException
Повертає масив об'єктів Field, що відображають усі поля, оголошені класом або інтерфейсом, представленими цим об'єктом Class. Це включає загальнодоступний, захищений, стандартний (пакетний) доступ та приватні поля, але виключає успадковані поля. Елементи в масиві, що повертається, не сортуються і не є в якомусь конкретному порядку. Цей метод повертає масив довжиною 0, якщо клас або інтерфейс не оголошує поля, або якщо цей об'єкт Class представляє примітивний тип, клас масиву або недійсний.
А що, якщо мені потрібні всі поля з усіх батьківських класів? Потрібен деякий код, наприклад, з https://stackoverflow.com/a/35103361/755804 :
public static List<Field> getAllModelFields(Class aClass) {
List<Field> fields = new ArrayList<>();
do {
Collections.addAll(fields, aClass.getDeclaredFields());
aClass = aClass.getSuperclass();
} while (aClass != null);
return fields;
}
getField
може отримати поле, успадковане від суперкласу, алеgetDeclaredField
не може.getDeclaredField
обмежитися класом, на якому ви викликаєте функцію.