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

Cách làm cho các phần tử của mảng (array) bất biến (immutable) trong Java

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

  1. Lấy mảng cần chuyển đổi.
  2. Chuyển thành List bằng Arrays.asList().
  3. 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ặc new ArrayList<>(Arrays.asList(strArray)) rồi mới unmodifiable.