Java List.copyOf — สแนปช็อตลิสต์แบบอ่านอย่างเดียวในคำสั่งเดียว
น้องกายEngineering
เวลาคืนลิสต์จากเมธอดแล้วกลัวคนเรียก .add() ใส่ต่อ — ผมเคยห่อ Collections.unmodifiableList(new ArrayList<>(src)) จนโค้ดยาวครับ
List.copyOf(collection) สร้างลิสต์ immutable ที่เป็นสแนปช็อตของสมาชิกตอนเรียก (API)
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
var live = new ArrayList<String>();
live.add("a");
live.add("b");
List<String> snap = List.copyOf(live);
live.add("c");
assert snap.equals(List.of("a", "b")) : snap;
boolean rejected = false;
try {
snap.add("x");
} catch (UnsupportedOperationException expected) {
rejected = true;
}
assert rejected : "snap must be unmodifiable";
System.out.println("List.copyOf snapshot verified");
}
}
ห้ามมี null ในสมาชิก — copyOf โยน NullPointerException ถ้าเจอ null
Recap
- แทนที่
unmodifiableList(new ArrayList<>(…))ด้วยList.copyOfเมื่อต้องการสแนปช็อต - เช็กว่าข้อมูลไม่มี null
- ใช้คู่กับ
Set.copyOf/Map.copyOfในสไตล์เดียวกัน - รันตัวอย่างบน JDK ที่ทีมใช้จริง