2013-05-09 14 views
7

Sto cercando di ottenere il numero di campi in una particolare classe. Tuttavia la tecnica che sto utilizzando non funziona e restituisce sempre 0:this.getClass(). GetFields(). Length; restituisce sempre 0

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

Come ottengo il conteggio dei campi di una particolare classe?

+1

'getFields()' restituisce solo i campi 'public'. – GriffeyDog

+1

Ora mi rendo conto che si tratta di un duplicato, ma ho passato più di 20 minuti a cercare e in realtà non ho trovato nessuna domanda che rispondesse alla mia domanda. Forse il motore di ricerca deve essere migliorato un po '. –

risposta

9

Utilizzare this.getClass().getDeclaredFields().length Il metodo getFields è per campi pubblici accessibili - vedere documentation.

+0

Capisco. È qui che mi sento un po 'confuso. Ho pensato fin dai getter/setter in cui sarebbero stati inclusi. Errore mio. Grazie. –

+0

I getter e gli insettivori non sono trattati in modo speciale in alcun modo, in generale. –

+0

Onestamente, questo mi inganna ogni volta che uso il riflesso. –

0

Dal Class#getFields JavaDoc:

restituisce una matrice contenente oggetti Field riflettono tutti i campi pubblici accessibili della classe o interfaccia rappresentata dall'oggetto Class.

Forse i vostri campi sono dichiarati come private o protected, quindi mai ottenere il giusto numero di campi nella classe. È necessario utilizzare Class#getDeclaredFields

Restituisce un array di oggetti Field che riflettono tutti i campi dichiarati dalla classe o dall'interfaccia rappresentata da questo oggetto Class. Ciò include accesso pubblico, protetto, predefinito (pacchetto) e campi privati ​​, ma esclude i campi ereditati.

0

getFields() restituisce solo campi accessibili al pubblico. È probabile che i campi della tua classe siano avvolti da getter e setter.

Si consiglia di utilizzare getDeclaredFields() invece. Restituirà tutti i campi, indipendentemente dalla visibilità.