มีสองสามกรณีที่คุณต้องการใช้แผนที่ที่ไม่เปลี่ยนรูปแบบรายการชุดหรือคอลเลกชันประเภทอื่น ๆ
เป็นครั้งแรกและกรณีใช้เนื้อหาที่สำคัญที่สุดคือเมื่อใดก็ตามที่คุณกลับเป็นผลมาจากการสอบถามหรือการคำนวณว่าจะกลับมาเป็นชุด (หรือรายการหรือแผนที่) ของผลลัพธ์ที่คุณควรชอบที่จะใช้โครงสร้างข้อมูลไม่เปลี่ยนรูป
ในกรณีนี้ฉันชอบที่จะคืนค่าเวอร์ชันที่ไม่เปลี่ยนรูปแบบเพราะสิ่งนี้สะท้อนให้เห็นถึงความไม่เปลี่ยนรูปจริงของชุดผลลัพธ์ของการคำนวณที่ชัดเจนมากขึ้น - ไม่ว่าคุณจะทำอย่างไรกับข้อมูลในภายหลังชุดผลลัพธ์ที่คุณได้รับจากแบบสอบถามของคุณ เปลี่ยนแปลง
กรณีการใช้งานทั่วไปที่สองคือเมื่อคุณต้องการระบุอาร์กิวเมนต์เป็นอินพุตให้กับวิธีการหรือบริการ เว้นแต่คุณจะคาดหวังการรวบรวมอินพุตจะถูกแก้ไขโดยบริการหรือวิธีการ (ซึ่งโดยปกติจะเป็นแนวคิดการออกแบบที่ไม่ดีจริงๆ) การส่งผ่านคอลเลกชันที่ไม่เปลี่ยนรูปแทนการเปลี่ยนแปลงที่ไม่แน่นอนอาจเป็นตัวเลือกที่สมเหตุสมผลและปลอดภัยในหลายกรณี
ฉันคิดว่ามันเป็น"ผ่านค่า"การประชุม
โดยทั่วไป - เป็นวิธีปฏิบัติที่สมเหตุสมผลในการใช้โครงสร้างข้อมูลที่ไม่เปลี่ยนรูปเมื่อใดก็ตามที่ข้อมูลข้ามโมดูลหรือขอบเขตการบริการ สิ่งนี้ทำให้ง่ายขึ้นมากในการให้เหตุผลเกี่ยวกับความแตกต่างระหว่างอินพุต / เอาต์พุต (ไม่เปลี่ยนรูป) และสถานะภายในที่ไม่แน่นอน
ในฐานะที่เป็นผลข้างเคียงที่เป็นประโยชน์อย่างมากจากสิ่งนี้คือการเพิ่มความปลอดภัยและความปลอดภัยของเธรดของโมดูล / บริการของคุณ
อีกเหตุผลที่ดีในการใช้Collections.empty*()
วิธีการคือการขาดความชัดเจน ในยุคก่อน Java7 ถ้าคุณมีคอลเลกชันทั่วไปคุณต้องโรยคำอธิบายประกอบประเภททั่วไปทั่วสถานที่
เพียงเปรียบเทียบการประกาศทั้งสองนี้:
Map<Foo, Comparable<? extends Bar>> fooBarMap = new HashMap<Foo, Comparable<? extends Bar>>();
เมื่อเทียบกับ:
Map<Foo, Comparable<? extends Bar>> fooBarMap = Collections.emptyMap();
หลังอย่างชัดเจนชนะมือในการอ่านในสองวิธีสำคัญ
- ในการประกาศครั้งแรกการสร้างอินสแตนซ์ทั้งหมดของแผนที่ที่ว่างเปล่านั้นถูกฝังอยู่ในเสียงของการประกาศประเภททั่วไป
- นอกเหนือจากการไม่มีคำอธิบายประกอบแบบทั่วไปทางด้านขวารุ่นที่สองระบุไว้อย่างชัดเจนว่าแผนที่จะเริ่มต้นเป็นแผนที่ว่าง นอกจากนี้การรู้ว่าวิธีนี้จะส่งคืนแผนที่ที่ไม่เปลี่ยนรูปได้ในขณะนี้ฉันสามารถหาได้ง่ายกว่าที่ไหน
fooBarMap
ถูกกำหนดค่าที่ไม่ว่าง/fooBarMap =/
เปล่าอีกเพียงแค่การค้นหา