Immutable ArrayList en Java
1. Vue d'ensemble
Ce tutoriel rapide montrerahow to make an ArrayList immutable avec le noyau JDK, avec Guava et enfin avec Apache Commons Collections 4.
Cet article fait partie dethe “Java – Back to Basic” series ici par exemple.
Lectures complémentaires:
Recueillir un flux Java dans une collection immuable
Apprenez à collecter des flux Java en collections immuables.
Introduction aux Immutables
Une introduction rapide et pratique à la bibliothèque Immutables - utilisée pour générer des objets immuables via des annotations.
Java - Obtenir un élément / élément aléatoire d'une liste
Un guide rapide et pratique pour choisir un ou plusieurs éléments au hasard dans une liste en Java.
2. Avec le JDK
Premièrement, le JDK offre un moyen intéressant d’extraire une collection non modifiable d’une collection existante:
Collections.unmodifiableList(list);
La nouvelle collection ne devrait plus être modifiable à ce stade:
@Test(expected = UnsupportedOperationException.class)
public void givenUsingTheJdk_whenUnmodifiableListIsCreated_thenNotModifiable() {
List list = new ArrayList(Arrays.asList("one", "two", "three"));
List unmodifiableList = Collections.unmodifiableList(list);
unmodifiableList.add("four");
}
3. Avec goyave
Guava fournit des fonctionnalités similaires pour créer sa propre version deImmutableList:
ImmutableList.copyOf(list);
De même, la liste résultante ne doit pas être modifiable:
@Test(expected = UnsupportedOperationException.class)
public void givenUsingGuava_whenUnmodifiableListIsCreated_thenNotModifiable() {
List list = new ArrayList(Arrays.asList("one", "two", "three"));
List unmodifiableList = ImmutableList.copyOf(list);
unmodifiableList.add("four");
}
Notez que cette opération sera en faitcreate a copy of the original list, pas seulement une vue.
Guava fournit également un générateur - cela retournera lesImmutableList de type fort au lieu de simplementList:
@Test(expected = UnsupportedOperationException.class)
public void givenUsingGuavaBuilder_whenUnmodifiableListIsCreated_thenNoLongerModifiable() {
List list = new ArrayList(Arrays.asList("one", "two", "three"));
ImmutableList unmodifiableList = ImmutableList.builder().addAll(list).build();
unmodifiableList.add("four");
}
4. Avec Apache Collections Commons
Enfin, Commons Collection fournit également une API pour créer une liste non modifiable:
ListUtils.unmodifiableList(list);
Et encore une fois, la modification de la liste résultante devrait entraîner unUnsupportedOperationException:
@Test(expected = UnsupportedOperationException.class)
public void givenUsingCommonsCollections_whenUnmodifiableListIsCreated_thenNotModifiable() {
List list = new ArrayList(Arrays.asList("one", "two", "three"));
List unmodifiableList = ListUtils.unmodifiableList(list);
unmodifiableList.add("four");
}
5. Conclusion
Ce didacticiel montre comment utiliser facilement lescreate an unmodifiable List out of an existing ArrayList en utilisant le noyau JDK, Google Guava ou Apache Commons Collections.
L'implémentation de tous ces exemples et extraits de codecan be found over on Github - il s'agit d'un projet basé sur Maven, il devrait donc être facile à importer et à exécuter tel quel.