TP2 (Reflexion)
La classe Class
Travail à effectuer
- Ecrire un programme Java auquel on donne le nom d'une classe (une chaîne de caractères) et qui affiche toute l'information que l'on peut obtenir par introspection (modificateurs, classes dont elle hérite, interfaces implémentées, membres avec leur type et leur modificateur).
- Vous pouvez si vous le souhaitez partir de ce squelette de programme (AnalyseurDeClasse.java) et le compléter.
Résultat attendu
Pour la commande
java AnalyseurDeClasse java.awt.Point
public class java.awt.Point extends java.awt.geom.Point2D implements java.io.Serializable {
- // Champs
- public int x;
- public int y;
- private static final long serialVersionUID;
- // Constructeurs
- public java.awt.Point(int, int);
- public java.awt.Point(java.awt.Point);
- public java.awt.Point();
- // Méthodes
- public boolean equals(java.lang.Object);
- public java.lang.String toString();
- public java.awt.Point getLocation();
- public double getX();
- public double getY();
- public void move(int, int);
- public void setLocation(java.awt.Point);
- public void setLocation(int, int);
- public void setLocation(double, double);
- public void translate(int, int);
- }
Une méthode toString() générique
Travail à effectuer :
- Utiliser l'introspection pour créer un méthode
toString(...)
générique. Il s'agit en pratique de faire une méthodetoString
qui prend en paramètre un objet de typeObject
et affiche la valeur de chacun de ses champs. Attention, si les champs sont des références sur d'autres objets on descendra en profondeur pour afficher "récursivement" leur valeur également. - Comme il faut bien s'arrêter un jour, la méthode
toString(...)
aura un deuxième paramètre qui est la profondeur à laquelle on souhaite descendre.
Exemple
Le code Java suivant :
static public void main(String[] args) {
- System.out.println(new GenericToString().toString(new Point(12,24)));
- Polygon pol = new Polygon(new int[]{10, 20, 30}, new int[]{20,30, 40}, 3);
- pol.getBounds();
- System.out.println(new GenericToString().toString(pol, 2));
- }
doit provoquer le résultat ci-dessous:
java.awt.Point[x=12; y=24; serialVersionUID=-5276940640259749850] java.awt.Polygon[npoints=3; xpoints={10, 20, 30}; ypoints={20, 30, 40}; bounds=java.awt.Rectangle[x=10; y=20; width=20; height=20; serialVersionUID=-4345857070255674764; OUT_LEFT=1; OUT_TOP=2; OUT_RIGHT=4; OUT_BOTTOM=8]; serialVersionUID=-6460061437900069969; MIN_LENGTH=4]
TP rédigé par Frédéric Mallet (Unice).