Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีทำให้ Array เป็น Immutable ใน Java

ใน Java Array ไม่สามารถทำให้ Immutable ได้โดยตรง เพราะ Array เป็น Mutable Object เสมอ แต่เราสามารถสร้าง Unmodifiable View ผ่าน List ได้

วิธีการ: แปลง Array -> List -> UnmodifiableList

  1. สร้าง Array
  2. แปลงเป็น List ด้วย Arrays.asList()
  3. ห่อหุ้มด้วย 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 ในปัจจุบัน