Comment créer une liste immuable dans Java?
J'ai besoin de convertir mutable objet de liste de liste immuable,ce qui est la façon possible en java.
public void action() {
List<MutableClass> mutableList = Arrays.asList(new MutableClass("san", "UK", 21), new MutableClass("peter", "US", 34));
List<MutableClass> immutableList = immutateList(mutableList);
}
public List<MutableClass> immutateList(List<MutableClass> mutableList){
//some code here to make this beanList immutable
//ie. objects and size of beanList should not be change.
//ie. we cant add new object here.
//ie. we cant remove or change existing one.
}
MutableClass
final class MutableClass {
final String name;
final String address;
final int age;
MutableClass(String name, String address, int age) {
this.name = name;
this.address = address;
this.age = age;
}
}
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Une fois votre
beanList
a été initialisé, vous pouvez le faireà faire inmodifiable. (Voir Immuable vs Inmodifiable collection)
Si vous avez deux méthodes internes qui doivent être en mesure de modifier la liste, et les méthodes publiques qui ne devrait pas autoriser la modification, je vous suggère de vous faire
(Votre
Bean
objets semblent immuables.)Comme un side-note: S'il vous arrive d'être à l'aide de Java 8+, votre
getMutableList
peut être exprimée comme suit:Utilisation
Collections.unmodifiableList()
. Vous passez votre originalArrayList
et elle renvoie une liste qui lève une exception si vous essayez d'ajouter, de supprimer ou de changement des éléments. Par exemple, l'utilisationreturn Collections.unmodifiableList(beanList);
au lieu dereturn beanList;
à la fin degetImmutableList()
.main()
lèvera une exception. LeCollections
classe possède des méthodes pour tous les autres types de collection en plus de la liste ainsi.Ci-dessous la solution est de faire liste comme Immuable, sans l'aide d'une API.
Immuable Objet avec ArrayList variable membre
}
Donc la liste ne sera pas changé, toujours la sortie sera [A,B]
De Java 10,
List.copyOf(Collection)
peut être utilisé pour renvoyer un inmodifiable liste de la collection donnée. À partir du code source deList.copyOf
méthode:si la collection est une inmodifiable Liste,
List.copyOf()
ne va pas créer une copie.si la collection est mutable et modifié, la liste retournée ne sera pas tenir compte de ces modifications. Ce qui signifie qu'ils sont dépendants.
Dans le JDK 8:
Dans le JDK 9:
référence
Si sont ouverts à l'utilisation d'une bibliothèque tierce, Eclipse Collections vous permet de convertir de
MutableList
àImmutableList
et de retour à nouveau.Cela fonctionne également avec les collections de primitifs.
Si vous avez un
ArrayList
que la mutableList
le travail.Remarque: je suis un committer pour Eclipse Collections.