Informazioni a runtime sulle classi
E’ possibile avere informazioni a runtime di classi che non conosciamo? Si è possibile e vediamo come con questo breve esempio
Durante l’esecuzione di un programma Java è possibile utilizzare le classi che fanno parte del package java.lang.reflect per avere informazioni su altre classi che non conosciamo a priori. Grazie durante l’esecuzione di un programma Java possiamo dinamicamente avere informazioni di una classe sconosciuta, sapendo quali sono i suoi costruttori, i suoi metodi e i suoi campi.
Questo grazie alle seguenti classi: Class, Method, Field. Nel seguente esempio di codice vediamo come poter stampare le informazioni riguardanti una classe che viene passata come argomento al nostro programma.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.lang.reflect.*; public class ProvaReflection { public static void main(String args[]){ if (!args.length>0) { System.out.println("Nessuna classe specificata"); System.exit(-1); } try { Class classe = Class.forName(args[0]); System.out.println(args[0]); Method metodo[] = classe.getDeclaredMethods(); for (int i = 0; i < metodo.length; i++) System.out.println("Metodo "i+" "+metodo[i].toString()); Field listacampi[] = classe.getDeclaredFields(); for (int i = 0; i < listacampi.length; i++) { Field fld = listacampi[i]; System.out.println("Nome = " + fld.getName()); System.out.println("Classe = " +fld.getDeclaringClass()); System.out.println("Tipo= " + fld.getType()); int mod = fld.getModifiers(); System.out.println("Modificatore = " +Modifier.toString(mod)); } } catch (Throwable e) { System.err.println(e); } } } |
Inoltre possiamo invocare i metodi di questa classe sapendo i parametri che devono essere passati , utilizzando Method e Field sempre dinamicamente.