2013-05-09 3 views
7

Я пытаюсь получить количество полей в определенном классе. Однако метод, который я использую, не работает и всегда возвращает 0:this.getClass(). GetFields(). Length; всегда возвращает 0

this.getClass().getFields().length; 

Как получить полевое поле определенного класса?

+1

'getFields()' возвращает только 'public' поля. – GriffeyDog

+1

Теперь я понимаю, что это дубликат, но я потратил более 20 минут на поиск и действительно не нашел вопросов, которые отвечали на мой вопрос. Возможно, поисковая система нуждается в улучшении. –

ответ

9

Использование this.getClass().getDeclaredFields().length Метод getFields предназначен для доступных общественных полей - см. documentation.

+0

Я вижу. Здесь я немного запутался. С тех пор, как я понял, с тех пор, как они были включены, они собирались публиковать их. Виноват. Благодарю. –

+0

Геттеры и сеттеры вообще не обрабатываются каким-либо образом, вообще говоря. –

+0

Честно говоря, это меня обманывает каждый раз, когда я использую отражение. –

0

От Class#getFields JavaDoc:

Возвращает массив, содержащий объекты Field, отражающие все доступные открытые поля класса или интерфейса, представленного этим объектом класса.

Может быть, ваши поля объявлены как private или protected, таким образом, никогда не получать нужное количество полей в классе. Вы должны использовать Class#getDeclaredFields

Возвращает массив объектов Field, отражающих все поля, объявленные классом или интерфейсом, представленным этим объектом класса. Это включает в себя общедоступный, защищенный, доступ по умолчанию (пакетный) и частные поля, но исключает унаследованные поля.

0

getFields() только возвращает общедоступные поля. Скорее всего, поля вашего класса обернуты геттерами и сеттерами.

Вместо этого вы должны использовать getDeclaredFields(). Он будет возвращать все поля, независимо от видимости.