Soit la classe suivante, représentant des graphes orientés avec un
noeud initial:
On souhaite créer un graphe sachant que
le noeud n1 possède deux fils n2 et n3,
que le noeud n2 possède un fils n4, que le noeud
n4 possède des arcs vers les noeuds n1, n3 et n5
et que n5 possède un lien sur lui-même.
Les itérateurs obtenus à partir des collections du paquetage
java.util
sont dits fail-fast, ce qui
signifie qu'une modification de la structure itérée entrelacée avec
l'utilisation de l'itérateur provoque par cette dernière la levée
d'une
ConcurrentModificationException
. Pour contrôler
ces modifications, les itérateurs utilisent le champ
modCount
protégé de la classe abstraite
AbstractList
.
Pour vous en convaincre, vous pouvez
regarder le code source avec eclipse.
En utilisant les mécanismes de réflexion offerts par le paquetage
java.lang.reflect
, faites en sorte que, dans le cas
particulier l'exemple suivant, l'exception
ConcurrentModificationException
ne soit pas levée par
l'itérateur d'un
ArrayList
, malgré la modification
faite sur cette structure. Pour celà, vous devrez modifier par
réflexion la valeur du champ
modCount
de la liste.