2013-05-09 16 views
7

Próbuję uzyskać liczbę pól w danej klasie. Jednak technika, której używam, nie działa i zawsze zwraca 0:this.getClass(). GetFields(). Length; zawsze zwraca 0

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

Jak uzyskać liczbę pól dla konkretnej klasy?

+1

'getFields()' zwraca tylko pola 'public'. – GriffeyDog

+1

Teraz zdaję sobie sprawę, że jest to duplikat, ale spędziłem ponad 20 minut na wyszukiwaniu i naprawdę nie znalazłem żadnego pytania, które by odpowiadało na moje pytanie. Być może wyszukiwarka wymaga niewielkiej poprawy. –

Odpowiedz

9

Metoda this.getClass().getDeclaredFields().length Metoda jest dostępna dla dostępnych publicznych pól - patrz documentation.

+0

Rozumiem. To jest miejsce, w którym jestem nieco zdezorientowany. Pomyślałem, że od czasu, gdy zdobywcy/setery będą publiczni, zostaną uwzględnieni. Mój błąd. Dzięki. –

+0

Zbiórki i setery nie są traktowane specjalnie w żaden sposób, ogólnie mówiąc. –

+0

Szczerze mówiąc, to mnie podstępem za każdym razem, kiedy używam odbicia. –

0

Z Class#getFields JavaDoc:

Zwraca tablicę zawierającą obiekty pól odzwierciedlające wszystkich dostępnych pól publicznych klasy lub interfejsu reprezentowanego przez ten obiekt klasy.

Może twoi pola są zadeklarowane jako private lub protected, więc nigdy się odpowiednią liczbę pól w swojej klasie. Należy użyć Class#getDeclaredFields

Zwraca tablicę obiektów terenowych odzwierciedlających wszystkie pola zadeklarowane przez klasę lub interfejs reprezentowanego przez ten obiekt klasy. Obejmuje to dostęp publiczny, chroniony, domyślny (pakietowy) i prywatne pola, ale nie obejmuje dziedziczonych pól.

0

zwraca tylko publicznie dostępne pola. Możliwe, że pola twojej klasy są pakowane przez moduły pobierające i ustawiające.

Zamiast tego należy użyć getDeclaredFields(). Zwróci wszystkie pola, niezależnie od widoczności.

Powiązane problemy