Я делаю университетский проект.
Мне нужно получить все поля из класса. Даже частные и унаследованные. Я попытался получить все объявленные поля, а затем бросил суперкласс и повторил.
Фрагмент моего кода:
private void listAllFields(Object obj) {
List<Field> fieldList = new ArrayList<Field>();
while (obj != null) {
fieldList.addAll(Arrays.asList(obj.getClass().getDeclaredFields()));
obj = obj.getClass().getSuperclass().cast(obj);
}
// rest of code
Но это не сработает. tmpObj
после литья по-прежнему остается одним и тем же классом (не суперклассом).
Я буду признателен за любую помощь, как исправить проблему кастинга или как получить эти поля по-разному.
EDIT:
Проблема заключается не в получении доступа к полям, а в получении имен полей!
Я управляю этим способом:
private void listAllFields(Object obj) {
List<Field> fieldList = new ArrayList<Field>();
Class tmpClass = obj.getClass();
while (tmpClass != null) {
fieldList.addAll(Arrays.asList(tmpClass .getDeclaredFields()));
tmpClass = tmpClass .getSuperclass();
}
// rest of code