Nepromjenjivi popis polja u Javi

1. Pregled

Pokazat će ovaj brzi vodič kako napraviti ArrayList nepromjenjiv s jezgrom JDK, s Guavom i na kraju s Apache Commons Collections 4.

Ovaj je članak dio „Java - Povratak na Basic”Serija ovdje na Baeldungu.

2. S JDK-om

Prvo, JDK pruža lijep način da iz postojeće zbirke dobijete neizmijenjivu kolekciju:

Collections.unmodifiableList (popis);

U ovom se trenutku nova kolekcija više ne bi mogla mijenjati:

@Test (očekuje se = UnsupportedOperationException.class) javna praznina givenUsingTheJdk_whenUnmodifiableListIsCreated_thenNotModifiable () {Lista popisa = novi ArrayList (Arrays.asList ("jedan", "dva", "tri")); Popis unmodifiableList = Collections.unmodifiableList (popis); unmodifiableList.add ("četiri"); }

2.1. Uz Javu 9

Od Jave 9 možemo koristiti a Popis (E ... elemenata) statička tvornička metoda za stvaranje nepromjenjivog popisa:

@Test (očekuje se = UnsupportedOperationException.class) javna konačna praznina givenUsingTheJava9_whenUnmodifiableListIsCreated_thenNotModifiable () {konačni popis popisa = novi ArrayList (Arrays.asList ("jedan", "dva", "tri")); konačni popis unmodifiableList = List.of (list.toArray (novi niz [] {})); unmodifiableList.add ("četiri"); }

Primijetite kako moramo pretvoriti postojeće popis u niz. Ovo je zbog List.of (elementi) prihvaća vararg parametre.

3. S Guavom

Guava nudi sličnu funkcionalnost za stvaranje vlastite verzije Nepromjenjiva lista:

ImmutableList.copyOf (popis);

Slično tome - rezultirajući popis ne smije se mijenjati:

@Test (očekuje se = UnsupportedOperationException.class) javna praznina givenUsingGuava_whenUnmodifiableListIsCreated_thenNotModifiable () {Lista popisa = novi ArrayList (Arrays.asList ("jedan", "dva", "tri")); Popis unmodifiableList = ImmutableList.copyOf (popis); unmodifiableList.add ("četiri"); }

Imajte na umu da će ova operacija zapravo biti stvoriti kopiju originalnog popisa, ne samo pogled.

Guava također nudi graditelja - to će vratiti jake tipke Nepromjenjiva lista umjesto jednostavno Popis:

@Test (očekuje se = UnsupportedOperationException.class) javna praznina givenUsingGuavaBuilder_whenUnmodifiableListIsCreated_thenNoLongerModifiable () {Lista popisa = novi ArrayList (Arrays.asList ("jedan", "dva", "tri")); ImmutableList unmodifiableList = ImmutableList.builder (). AddAll (popis) .build (); unmodifiableList.add ("četiri"); }

4. S Apache Collections Commons

Konačno, Commons Collection također nudi API za stvaranje nepromjenjivog popisa:

ListUtils.unmodifiableList (popis);

I opet, izmjena rezultirajućeg popisa trebala bi rezultirati datotekom UnsupportedOperationException:

@Test (očekuje se = UnsupportedOperationException.class) javna praznina givenUsingCommonsCollections_whenUnmodifiableListIsCreated_thenNotModifiable () {Lista popisa = novi ArrayList (Arrays.asList ("jedan", "dva", "tri")); Popis unmodifiableList = ListUtils.unmodifiableList (popis); unmodifiableList.add ("četiri"); }

5. Zaključak

Ovaj vodič ilustrira kako jednostavno stvoriti nepromjenjivi popis od postojećeg ArrayList koristeći bilo JDK, Google Guava ili Apache Commons Collection.

Implementacija svih ovih primjera i isječaka koda možete pronaći na Githubu - ovo je projekt zasnovan na Mavenu, pa bi ga trebalo biti lako uvesti i pokrenuti kakav jest.