public Field[] getFields() throws SecurityException
Возвращает массив, содержащий объекты Field, отражающие все доступные публичные поля класса или интерфейса, представленные этим объектом Class. Элементы в возвращаемом массиве не сортируются и не располагаются в каком-либо определенном порядке. Этот метод возвращает массив длины 0, если у класса или интерфейса нет доступных открытых полей или если он представляет класс массива, примитивный тип или void.
В частности, если этот объект Class представляет класс, этот метод возвращает открытые поля этого класса и всех его суперклассов. Если этот объект Class представляет интерфейс, этот метод возвращает поля этого интерфейса и всех его суперинтерфейсов.
Поле неявной длины для класса массива не отражается этим методом. Пользовательский код должен использовать методы класса Array для манипулирования массивами.
public Field[] getDeclaredFields() throws SecurityException
Возвращает массив объектов Field, отражающих все поля, объявленные классом или интерфейсом, представленным этим объектом Class. Это включает в себя открытые, защищенные, доступ по умолчанию (пакет) и частные поля, но исключает унаследованные поля. Элементы в возвращаемом массиве не сортируются и не располагаются в каком-либо определенном порядке. Этот метод возвращает массив длины 0, если класс или интерфейс не объявляет полей, или если этот объект Class представляет примитивный тип, класс массива или void.
А что если мне понадобятся все поля из всех родительских классов? Необходим некоторый код, например, с 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
ограничьте себя классом, для которого вы вызываете функцию.