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?
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?
Metoda this.getClass().getDeclaredFields().length
Metoda jest dostępna dla dostępnych publicznych pól - patrz documentation.
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. –
Zbiórki i setery nie są traktowane specjalnie w żaden sposób, ogólnie mówiąc. –
Szczerze mówiąc, to mnie podstępem za każdym razem, kiedy używam odbicia. –
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.
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.
'getFields()' zwraca tylko pola 'public'. – GriffeyDog
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. –