Depuis les javadocs ImmutableList:
Contrairement à Collections.unmodifiableList (Java.util.List), qui est une vue d'un séparé collection qui peut encore changer, un instance de ImmutableList contient son posséder des données privées et ne sera jamais changement. ImmutableList est pratique pour les listes finales statiques publiques ("listes constantes") et vous permet également faire facilement une "copie défensive" d'un liste fournie à votre classe par un votre interlocuteur.
Est-ce que cela signifie que:
Non, l’immuabilité ne s’applique qu’à la quantité et aux références des objets de la collection et ne traite pas de la mutabilité des objets que vous avez placés dans la collection.
Ce que la liste Immutable gagne par rapport au JDK Collections.unmodifiableList standard, c’est qu’en utilisant ImmutableList, vous êtes assuré que les objets référencés, leur ordre et la taille de la liste ne peuvent pas changer de source. Avec Collections.unmodifiableList, si quelque chose d'autre a une référence à la liste sous-jacente, ce code peut modifier la liste même si vous avez une référence à une liste non modifiable.
Si, toutefois, vous voulez une vraie immuabilité, vous devez remplir la liste avec des objets immuables.
Utiliser Collections.unmodifiableList
crée une enveloppe autour de votre liste. si la liste sous-jacente change, la vue de votre liste non modifiable change également.
Comme le dit la documentation, le code de Google crée une copie. C'est un calcul plus coûteux qui consomme plus de mémoire, mais si quelqu'un modifie la liste d'origine, cela n'affectera pas ImmutableList.
Aucune de ces méthodes ne vous empêchera de modifier un objet dans une liste, ses champs, ses champs, etc.
ImmutableList
est similaire à Collections.unmodifiableList( new ArrayList( list ) )
. Notez que la ArrayList
nouvellement créée est non assignée à un champ ou une variable.
Vous voudrez peut-être aussi regarder cette question (Quelle est la différence entre Collections.unmodifiableSet()
et ImmutableSet
de Goyave).