Không thể làm cho các phần tử của mảng primitive hoặc array object trở thành immutable trực tiếp. Mảng trong Java luôn mutable (có thể thay đổi phần tử).
Tuy nhiên, bạn có thể tạo một view chỉ đọc của mảng bằng cách chuyển sang List và dùng Collections.unmodifiableList().
Các bước thực hiện
- Lấy mảng cần chuyển đổi.
- Chuyển thành
ListbằngArrays.asList(). - Bọc bằng
Collections.unmodifiableList().
Ví dụ minh họa
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class UnmodifiableArrayExample {
public static void main(String args[]) {
// Mảng gốc
String strArray[] = {"Raju", "Rama", "Rahman", "Rachel", "Ranbhir", "Rangan"};
// Chuyển sang List
List<String> list = Arrays.asList(strArray);
// Tạo view bất biến
List<String> immutable = Collections.unmodifiableList(list);
System.out.println(immutable);
// Thử sửa đổi -> Exception
immutable.add("komala");
}
}
Kết quả
[Raju, Rama, Rahman, Rachel, Ranbhir, Rangan]
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.add(Unknown Source)
at UnmodifiableArrayExample.main(UnmodifiableArrayExample.java:19)
Lưu ý quan trọng:
Arrays.asList()trả về list backed by array gốc. Thay đổi list này sẽ thay đổi mảng gốc và ngược lại.unmodifiableList()chỉ ngăn chặn sửa đổi qua list wrapper. Mảng gốc vẫn có thể bị thay đổi trực tiếp:strArray[0] = "New".- Để immutable thực sự, hãy copy dữ liệu:
List.of(strArray)(Java 9+) hoặcnew ArrayList<>(Arrays.asList(strArray))rồi mới unmodifiable.