Se Java ha pensato alla classe
Object
(detta anche classe cosmica) per gli oggetti, esisterà qualcosa per modellare le classi? Come fa la JVM a tenere traccia delle classi durante l'esecuzione (a run-time) dell'applicazione?Java ha così pensato alla classe
Class
, è attraverso essa che la JVM cerca le informazioni sui metodi e i campi delle classi. La stessa classe Object
prevede, infatti, un metodo che restituisce al chiamante un oggetto di tipo Class
, si tratta del metodo getClass()
, che se invocato su un oggetto ritorna informazioni sulla classe di appartenenza dell'oggetto, un oggetto Class
.Se
x
è un oggetto della classe Card
, la chiamata al metodo x.getClass()
ritorna l'oggetto Class
che modella la classe Card
! E ancora, se siamo interessati al nome della classe è sufficiente invocare sull'oggetto Class
il metodo getName()
. Quindi, x.getClass().getName()
ritorna Card
.Se ci occorre l'istanza di un oggetto avente lo stesso tipo di un altro oggetto a noi noto si può chiamare
newIstance()
. Pertanto, con x.getClass().newIstance()
riceviamo il riferimento a un nuovo oggetto Card
(se x
è un oggetto della classe Card
). Attenzione, il metodo newIstance()
della classe Class
chiama il costruttore predefinito della classe del parametro implicito (quindi di x
). Se siamo interessati alla super classe di un oggetto non ci resta che invocare, allora, il metodo getSuperclass()
.Con
getFields()
, getMethods()
e getConstructors()
riceviamo un array con i campi dell'istanza e con i metodi pubblici e con i costruttori previsti dalla classe. Con getDeclaredFields()
, getDeclaredMethods()
e getDeclaredConstructors()
, invece, ci vengono restituiti gli array con i campi dell'istanza e i metodi privati (oppure protetti).Attenzione, gli array ritornati sono di tipo
Field
per i metodi, di tipo Method
per i metodi e di tipo Constructor
per i costruttori. Si tratta di tre classi usate dal package java.lang.reflect
per modellare i campi, i metodi e i costruttori di una classe. Come sempre, la guida in linea per le API è nostra amica.
Nessun commento:
Posta un commento