mika-el
3/19/2018 - 10:58 AM

Reflexivite

/*
 * Lorsque votre JVM interprète votre programme, elle crée automatiquement un objet Class pour chaque classe chargée.
 * Avec un tel objet, vous pouvez connaître absolument tout sur votre classe.
 * L'objet Class utilise des sous-objets tels que Method, Field et Constructor qui permettent de travailler avec vos différents objets ainsi qu'avec ceux présents dans Java.
 * Grâce à cet objet, vous pouvez créer des instances de vos classes Java sans utiliser new.
 */
 
public static void main(String[] args) {
	// Récupérer un object Class
	Class c = String.class;
	// Class c2 = new String().getClass();
	
	/*
	 *  Connaître la superclasse d'une classe.
	 */
	System.out.println("La superclasse de la classe " + String.class.getName() + " est : " + String.class.getSuperclass());
	
	/*
	 *  Connaître les interfaces d'une classe.
	 */
	Class[] faces = c.getInterfaces();
	// Pour voir le nombre d'interfaces
	System.out.println("Il y a " + faces.length + " interfaces implémentées");
	// On parcourt le tableau d'interfaces
	for(int i = 0; i < faces.length; i++) {
		System.out.println(faces[i]);
	}
	
	/*
	 *  Connaître les méthodes d'une classe avec les paramètres.
	 */
	Method[] m = c.getMethods();
	// Pour voir le nombre de méthodes      
	System.out.println("Il y a " + m.length + " méthodes dans cette classe");
	//On parcourt le tableau de méthodes et on récupère les paramètres.
	for(int i = 0; i < m.length; i++) {
		System.out.println(m[i]);
		Class[] p = m[i].getParameterTypes();
		for(int j = 0; j < p.length; j++) {
			System.out.println(p[j].getName());
		}
		System.out.println("----------------------------------\n");
	}
		
	
	/*
	 *  Connaître les propriétées d'une classe.
	 */	
	Field[] m2 = c.getDeclaredFields();
	System.out.println("Il y a " + m2.length + " champs dans cette classe");
	//On parcourt le tableau de méthodes
	for(int i = 0; i < m2.length; i++) {
		System.out.println(m2[i].getName());
	}
	
	/*
	 *  Connaître les constructeurs d'une classe.
	 */
	Constructor[] construc = c.getConstructors();   
	System.out.println("Il y a " + construc.length + " constructeurs dans cette classe");
	//On parcourt le tableau des constructeurs
	for(int i = 0; i < construc.length; i++){
		System.out.println(construc[i].getName());
		Class[] param = construc[i].getParameterTypes();                        
		for(int j = 0; j < param.length; j++) {
			System.out.println(param[j]);
		}
		System.out.println("-----------------------------\n");
	}
}