ใน Java Array ไม่สามารถทำให้ Immutable ได้โดยตรง เพราะ Array เป็น Mutable Object เสมอ แต่เราสามารถสร้าง Unmodifiable View ผ่าน List ได้
วิธีการ: แปลง Array -> List -> UnmodifiableList
- สร้าง Array
- แปลงเป็น List ด้วย
Arrays.asList() - ห่อหุ้มด้วย
Collections.unmodifiableList()
ตัวอย่างโค้ด
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class ImmutableArrayExample {
public static void main(String args[]) {
// 1. Array ปกติ
String[] strArray = {"Raju", "Rama", "Rahman", "Rachel", "Ranbhir", "Rangan"};
// 2. แปลงเป็น List
List<String> list = Arrays.asList(strArray);
// 3. ทำให้ Read-Only
List<String> immutableList = Collections.unmodifiableList(list);
System.out.println("Immutable List: " + immutableList);
// พยายามแก้ไข -> Exception
immutableList.add("Komala"); // java.lang.UnsupportedOperationException
}
}
ผลลัพธ์
Immutable List: [Raju, Rama, Rahman, Rachel, Ranbhir, Rangan]
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.add(...)
ข้อควรทราบ
Arrays.asList()คืน Fixed-size List (เพิ่ม/ลบไม่ได้ แต่ แก้ไข Element ได้ เช่นlist.set(0, "New"))Collections.unmodifiableList()ป้องกันการแก้ไขทุกอย่าง (add, remove, set)- ยังคงเป็น View หาก Array ต้นทางเปลี่ยน List ก็จะเปลี่ยนตาม
ทางเลือกที่ดีกว่า (Java 9+)
// สร้าง Immutable List จริง (Copy ข้อมูล ไม่ใช่ View)
List<String> trulyImmutable = List.of("Raju", "Rama", "Rahman");
// หรือจาก Array
List<String> fromArray = List.of(strArray); // Java 11+
List.of() สร้าง Immutable Collection จริงๆ (ไม่ใช่ View) ปลอดภัยกว่า และเป็น Best Practice ในปัจจุบัน