Le but de cet exercice est d'écrire une méthode
asMap qui prend
un objet en paramètre et le voit comme une
Map<String, Object>.
Par exemple, avec la classe
Point ci-dessous:
le code suivant doit afficher
{x=2, y=3, class=class fr.umlv.reflect.Point}.
Point p = new Point(2, 3);
Map<String, Object> map = Introspectors.asMap(p);
System.out.println(p);
La méthode
asMap marche de la façon suivante: pour chaque méthode
getFoo()
présente dans la classe de l'objet passé en paramètre, elle associe, dans
la table de hachage, (a) une clé
foo qui correspond au nom de la méthode
sans le "get" et avec la première lettre en minuscule, et (b) une valeur qui est la valeur
renvoyée par l'appel à la méthode. La valeur correspondant à une clé n'est pas calculée
une fois pour toutes lors de la création de la
Map mais à chaque fois que
l'on accède à la valeur. En ça, la
Map agit comme une vue de l'objet.
Par exemple, le code suivant doit afficher
{x=3, y=4, class=class fr.umlv.reflect.Point}.
Point p = new Point(2, 3);
Map<String, Object> map = Introspectors.asMap(p);
p.translate(1, 1);
System.out.println(p);
Mais, avant d'implanter
asMap, nous allons implanter un certain nombre
de méthodes de support. Nous aurons besoin d'une interface de support
Getter et nous travaillerons dans la classe
Introspectors.