En regardant le code de Collections
j'ai appris que lorsqu'on utilise la méthode unmodifiableList(List list)
ou unmodifiableCollection(Collection c)
il ne s'agit pas de créer un nouvel objet mais de retourner la référence du même objet et de surcharger les méthodes qui peuvent modifier l'objet. List
[ add
, addall
, remove
, retainAll
... ]
J'ai donc effectué ce test :
List modifiableList = new ArrayList();
modifiableList.add ( 1 );
List unmodifiableList = Collections.unmodifiableList( modifiableList );
// unmodifiableList.add(3); // it will throw the exception
modifiableList.add ( 2 );
System.out.println( unmodifiableList );
Le résultat est [ 1,2 ]
.
La question est de savoir pourquoi il s'agit du même objet. Pourquoi ne pas créer un nouvel objet ?