Változhatatlan ArrayList Java-ban
1. Áttekintés
Ez a gyors bemutató megmutatja hogyan készítsünk egy Tömb lista változhatatlan a központi JDK-val, a Guava-val és végül az Apache Commons Collections 4-gyel.
Ez a cikk a „Java - Vissza az alapokhoz”Sorozat itt, a Baeldungon.
2. A JDK-val
Először is, a JDK jó módot kínál arra, hogy módosíthatatlan gyűjteményt szerezzen ki egy meglévőből:
Gyűjtemények.unmodifiableList (lista);
Az új gyűjtemény ezen a ponton már nem módosítható:
@Test (várható = UnsupportedOperationException.class) public void givenUsingTheJdk_whenUnmodifiableListIsCreated_thenNotModifiable () {List list = new ArrayList (Arrays.asList ("egy", "kettő", "három")); List unmodifiableList = Collections.unmodifiableList (list); unmodifiableList.add ("négy"); }
2.1. Java 9-el
A Java 9 óta használhatjuk a List.of (E… elemek) statikus gyári módszer egy változhatatlan lista létrehozásához:
@Test (várható = UnsupportedOperationException.class) public final void givenUsingTheJava9_whenUnmodifiableListIsCreated_thenNotModifiable () {final List list = new ArrayList (Arrays.asList ("one", "two", "three")); final List unmodifiableList = List.of (list.toArray (új karakterlánc [] {})); unmodifiableList.add ("négy"); }
Figyeljük meg, hogyan kell átalakítanunk a meglévőt lista tömbbe. Ez azért van, mert List.of (elements) elfogadja a vararg paramétereket.
3. Guavával
A Guava hasonló funkciókat kínál a saját verziójának létrehozásához ImmutableList:
ImmutableList.copyOf (lista);
Hasonlóképpen - az eredményül kapott listát nem lehet módosítani:
@Test (várható = UnsupportedOperationException.class) public void givenUsingGuava_whenUnmodifiableListIsCreated_thenNotModifiable () {List list = new ArrayList (Arrays.asList ("egy", "kettő", "három")); List unmodifiableList = ImmutableList.copyOf (lista); unmodifiableList.add ("négy"); }
Vegye figyelembe, hogy ez a művelet valóban megtörténik hozzon létre egy példányt az eredeti listáról, nem csak kilátás.
A Guava építõket is biztosít - ez visszaadja az erõseket ImmutableList ahelyett, hogy egyszerűen Lista:
@Test (várható = UnsupportedOperationException.class) public void givenUsingGuavaBuilder_whenUnmodifiableListIsCreated_thenNoLongerModifiable () {List list = new ArrayList (Arrays.asList ("egy", "kettő", "három")); ImmutableList unmodifiableList = ImmutableList.builder (). AddAll (list) .build (); unmodifiableList.add ("négy"); }
4. Az Apache Collections Commons-szal
Végül a Commons Collection API-t is biztosít egy módosíthatatlan lista létrehozásához:
ListUtils.unmodifiableList (lista);
És az eredményül kapott lista módosítása ismét egy UnsupportedOperationException:
@Test (várt = UnsupportedOperationException.class) public void givenUsingCommonsCollections_whenUnmodifiableListIsCreated_thenNotModifiable () {List list = new ArrayList (Arrays.asList ("egy", "kettő", "három")); List unmodifiableList = ListUtils.unmodifiableList (lista); unmodifiableList.add ("négy"); }
5. Következtetés
Ez az oktatóanyag bemutatja, hogyan lehet egyszerűen hozzon létre egy módosíthatatlan listát egy létezőből Tömb lista vagy az alap JDK, a Google Guava vagy az Apache Commons gyűjtemények használatával.
Mindezen példák és kódrészletek megvalósítása megtalálható a Githubon - ez egy Maven-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.