Le paquetage java.lang.reflect possèdent plusieurs classes et interfaces permettant de mettre en oeuvre le mécanisme d'introspection.
Les trois classes Field, Method et Constructor possèdent un modificateur final. La machine Virtuelle Java peut seulement créer des instances de ces classes. Ces objets sont utilisés pour manipuler les objets sous-jacents :
La classe Array est également finale mais non-instanciable. Elle fournit des méthodes statiques qui permettent de créer de nouveaux tableaux et d'obtenir ou de fixer les éléments des tableaux.
Exemple [voir]import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class Introspection { public static void main(String[] args) { if (args.length > 0){ try { Class classe = Class.forName(args[0]); Field[] champs = classe.getDeclaredFields(); Method[] methodes = classe.getDeclaredMethods(); Constructor[] constructeurs = classe.getDeclaredConstructors(); System.out.println("Les champs de la classe " + classe.getName()); System.out.println("Num :\tChamp\tType"); for(int i = 0; i < champs.length; i++){ System.out.println(i + " :\t" + champs[i].getName() + "\t" + champs[i].getType()); } System.out.println("\nLes méthodes de la classe " + classe.getName()); System.out.println("Num :\tType de retour\tMethode\t" + "Types des Parametres\tTypes des Exceptions"); for(int i = 0; i < methodes.length; i++){ System.out.print(i + " :\t" + methodes[i].getReturnType() + "\t" + methodes[i].getName() + "\t"); afficherInfos(methodes[i], "getParameterTypes"); System.out.print("\t"); afficherInfos(methodes[i], "getExceptionTypes"); System.out.println(""); } System.out.println("\nLes constructeurs de la classe " + classe.getName()); System.out.println("Num :\tConstructeur\tTypes des Parametres" + "\tTypes des Exceptions"); for(int i = 0; i < constructeurs.length; i++){ System.out.print(i + " :\t" + constructeurs[i].getName() + "\t"); afficherInfos(constructeurs[i], "getParameterTypes"); System.out.print("\t"); afficherInfos(constructeurs[i], "getExceptionTypes"); System.out.println(""); } } catch (ClassNotFoundException e) { e.printStackTrace(); System.out.println("La classe n'a pu être déterminée dans la méthode main()!"); } } } /** |