Class Collections trong package java.util cung cấp các phương thức unmodifiableXxx() để tạo ra view chỉ đọc (read-only view) của các collection. Các view này không cho phép thêm, xóa, sửa phần tử.
Các phương thức unmodifiable chính
| STT | Phương thức & Mô tả |
|---|---|
| 1 | static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c) |
| 2 | static <T> List<T> unmodifiableList(List<? extends T> list) |
| 3 | static <K,V> Map<K,V> unmodifiableMap(Map<? extends K,? extends V> m) |
| 4 | static <T> Set<T> unmodifiableSet(Set<? extends T> s) |
| 5 | static <K,V> SortedMap<K,V> unmodifiableSortedMap(SortedMap<K,? extends V> m) |
| 6 | static <T> SortedSet<T> unmodifiableSortedSet(SortedSet<T> s) |
Ví dụ minh họa
import java.util.Collection;
import java.util.Collections;
import java.util.Vector;
public class CollectionReadOnly {
public static void main(String[] args) {
Vector<String> vector = new Vector<String>();
vector.add("JavaFx");
vector.add("Java");
vector.add("WebGL");
vector.add("OpenCV");
System.out.println(vector);
Collection<String> immutableVector = Collections.unmodifiableCollection(vector);
System.out.println("Vector converted to read only " + immutableVector);
// Thử thêm phần tử sẽ gây exception
immutableVector.add("CoffeeScript");
}
}
Exception xảy ra
[JavaFx, Java, WebGL, OpenCV]
Vector converted to read only [JavaFx, Java, WebGL, OpenCV]
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.add(Unknown Source)
at CollectionReadOnly.main(CollectionReadOnly.java:20)
Lưu ý: unmodifiableXxx() trả về một view của collection gốc. Collection gốc vẫn có thể bị thay đổi. Nếu cần collection thực sự bất biến (immutable), hãy dùng List.of(), Set.of(), Map.of() (Java 9+) hoặc thư viện Guava.