:: Enseignements :: ESIPE :: E4INFO :: 2012-2013 :: Java Avancé ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | List et Map |
Implantation des interfaces
List et
Map et un peu de réflexion.
Exercice 1 - Lists
Le but de cette exercice est d'écrire deux méthodex statiques renvoyant des listes
particulières à l'intérieur d'une classe fr.umlv.colls.Lists.
-
Rappeler à quoi servent les classes AbstractList, AbstractSequentialList
et RandomAccess.
-
Ecrire une méthode range qui prend en paramètre un index start
et un index end et qui renvoie une liste dont les éléments sont les éléments
compris entre start et end (start et end étant inclues).
L'astuce est que l'on n'est pas obligé de stocker les éléments entre start et end.
On peut juste faire en sorte que l'implantation renvoie les éléments
entre start et end.
Vérifier que votre implantation est bonne avec le test unitaire suivant:
ListsTest.java.
-
On souhaite maintenant écrire une méthode times qui prend en paramètre
un multiplicateur et une liste d'entiers et qui renvoie une nouvelle liste
où chaque entier à la position i a pour valeur l'entier à la position
i dans la liste passée en paramètre multipliée par le multiplicateur.
-
Expliquer pourquoi le test slooowTimes timeout ?
Comment corriger le problème ?
-
Implanter la solution retenue.
Exercice 2 - Maps
On cherche maintenant à écrire une classe fr.umlv.colls.Maps.
Cette classe possède une méthode statique asMap qui
permet de voir n'importe quel objet sous la forme d'une Map
dont les clés sont les propriétés (properties) non statiques de l'objet
et dont les valeurs correspondent aux valeurs des propriétés de l'objet.
Un objet définit une propriété s'il possède un getter ou un setter
sur cette propriété.
Par exemple, la classe java.awt.Point possède une méthode getX,
et possède donc une propriété x.
-
Ecrire dans une classe Main une méthode main qui
affiche tous les getters et les setters publics et non statiques de la classe
java.awt.Color.
-
Ajouter une méthode propertyMap qui prend une classe en paramètre
et renvoie une Map contenant en clé les noms des propriétés et
en valeur un objet Accessor
correspondant au couple getter/setter (dont un des deux accesseurs peut être null)
public et non statique.
-
A quoi sert la classe java.lang.ClassValue ?
(Aide: Lisez la doc :)
-
Modifier la méthode propertyMap pour que si on l'appel deux fois avec
la même classe la Map renvoyée soit la même (au sens de '==').
-
Ecrire la méthode asMap dans la classe Maps qui prend
en paramètre un objet et renvoie une Map dont les clés sont les propriétés
de l'objet et dont les valeurs les valeurs des propriétés de l'objet.
La Map renvoyé ne devra pas permettre d'ajouter de nouvelle propriété,
de supprimer une propriété existant. Par contre, elle devra permettre
la consultation des valeurs d'une propriété s'il existe un getter,
la modification de la valeur d'une propriété s'il existe un setter.
Enfin, la méthode put (ou Map.Entry.setValue())
aura une sémantique légèrement modifiée par
rapport à la méthode put de l'interface Map car
celle-ci renverra toujours null au lieu de renvoyer l'ancienne valeur
(car cette valeur n'est pas forcément accessible car le getter peut ne pas exister).
Note: l'interface Map.Entry vous oblige à implanter en plus des méthodes
getKey(), getValue() et setValue(), les méthodes
hashCode() et equals() avec une sémantique particulière,
donc RTFM.
© Université de Marne-la-Vallée