|
TD2 - Introspection et Réflexivité
De $1
La classe Class
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 {
-
- public int x;
- public int y;
- private static final long serialVersionUID;
-
-
- public java.awt.Point(int, int);
- public java.awt.Point(java.awt.Point);
- public java.awt.Point();
-
-
- 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);
- }
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éthode toString qui prend en paramètre un objet de type Object 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));
- }
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]
|