คำถามติดแท็ก semantic-integrity

2
ฉันจะคัดลอกคอลเลกชันอย่างปลอดภัยได้อย่างไร
ในอดีตฉันได้กล่าวว่าการคัดลอกคอลเลกชันอย่างปลอดภัยทำบางสิ่งเช่น: public static void doThing(List<String> strs) { List<String> newStrs = new ArrayList<>(strs); หรือ public static void doThing(NavigableSet<String> strs) { NavigableSet<String> newStrs = new TreeSet<>(strs); แต่ตัวสร้าง "สำเนา" เหล่านี้มีวิธีการสร้างและสตรีมแบบสแตติกที่คล้ายกันปลอดภัยจริงๆและมีการระบุกฎไว้ที่ไหนบ้าง โดยความปลอดภัยฉันหมายถึงการรับประกันความสมบูรณ์แบบพื้นฐานทางความหมายของภาษาจาวาและคอลเลกชันที่บังคับใช้กับผู้โทรที่เป็นอันตรายโดยสมมติว่าได้รับการสนับสนุนจากเหตุผลที่สมเหตุสมผลSecurityManagerและไม่มีข้อบกพร่องใด ๆ ฉันมีความสุขด้วยวิธีการขว้างปาConcurrentModificationException, NullPointerException, IllegalArgumentException, ClassCastExceptionฯลฯ หรือบางทีอาจจะแขวน ฉันได้เลือกStringเป็นตัวอย่างของการโต้แย้งประเภทไม่เปลี่ยนรูป สำหรับคำถามนี้ฉันไม่สนใจสำเนาชุดลึกสำหรับคอลเล็กชั่นที่ไม่แน่นอนซึ่งมี gotchas ของตัวเอง (เพื่อความชัดเจนฉันได้ดูซอร์สโค้ด OpenJDK และมีคำตอบบางอย่างสำหรับArrayListและTreeSet.)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.