venerdì 7 maggio 2010

Java: la classe class

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