Это переформулировка принятого ответа от @ user1079877. Возможно, это версия, которая не изменяет параметр функции, а также использует некоторые современные функции Java.
public <T> Field[] getFields(final Class<T> type, final Field... fields) {
final Field[] items = Stream.of(type.getDeclaredFields(), fields).flatMap(Stream::of).toArray(Field[]::new);
if (type.getSuperclass() == null) {
return items;
} else {
return getFields(type.getSuperclass(), items);
}
}
Эта реализация также делает вызов немного более кратким:
var fields = getFields(MyType.class);