Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách làm cho Collection chỉ đọc (read-only) trong Java

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

STTPhương thức & Mô tả
1static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c)
2static <T> List<T> unmodifiableList(List<? extends T> list)
3static <K,V> Map<K,V> unmodifiableMap(Map<? extends K,? extends V> m)
4static <T> Set<T> unmodifiableSet(Set<? extends T> s)
5static <K,V> SortedMap<K,V> unmodifiableSortedMap(SortedMap<K,? extends V> m)
6static <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.