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.