Страницы

Поиск по вопросам

понедельник, 4 февраля 2019 г.

С помощью рефлексии в java получить поле или метод

Все кажется просто:
Class c = user.getClass(); Field field = c.getField("id");
Но все крешется с ошибкой NoSuchFieldException Зато код:
Class c = user.getClass(); Field field = c.getDeclaredField("id");
Все работает. Так в чем разница? Во всех примерах используется 1 вариант но он не работает :(


Ответ

О, это одна из хитростей Java, getField - возвращает только публичные или унаследованные от суперклассов поля, а getDeclaredField - возвращает все поля класса... но не унаследованные от суперклассов поля (скажем вполне публичное поле, но доставшийся от суперкласса этот метод просто не увидит), так что если нужно вернуть действительно все нужно писать что-то вроде:
Field field; try { field = c.getField("id"); } catch (NoSuchFieldException e) { field = c.getDeclaredField("id"); }

Комментариев нет:

Отправить комментарий