บทคัดย่อมีชีวิตยืนยาวกว่าการนำไปใช้งาน
โดยทั่วไปยิ่งการออกแบบของคุณเป็นนามธรรมนานเท่าใดก็ยิ่งมีแนวโน้มที่จะมีประโยชน์มากขึ้นเท่านั้น ดังนั้นเนื่องจากคอลเลกชันเป็นนามธรรมมากขึ้นว่าเป็นอินเทอร์เฟซย่อยดังนั้นการออกแบบ API ที่ยึดตามคอลเลกชันจึงมีแนวโน้มที่จะยังคงมีประโยชน์มากกว่าหนึ่งรายการตามรายการ
แต่หลักการที่ครอบคลุมคือการใช้สิ่งที่เป็นนามธรรมที่เหมาะสมที่สุด ดังนั้นหากคอลเลกชันของคุณจะต้องสนับสนุนองค์ประกอบที่สั่งซื้อจากนั้นสั่งรายการถ้าไม่มีรายการที่ซ้ำกันให้สั่งชุดและอื่น ๆ
หมายเหตุเกี่ยวกับการออกแบบอินเตอร์เฟสทั่วไป
เนื่องจากคุณสนใจที่จะใช้อินเทอร์เฟซการเก็บรวบรวมกับข้อมูลทั่วไปคุณอาจเป็นประโยชน์ต่อไปนี้ Java ที่มีประสิทธิภาพโดย Joshua Blochแนะนำวิธีการต่อไปนี้เมื่อออกแบบอินเตอร์เฟสที่ต้องพึ่งพาข้อมูลทั่วไป: Producers Extend, Consumerers Super
นอกจากนี้ยังเป็นที่รู้จักกันเป็นกฎเต้า เป็นหลักถ้าคอลเลกชันทั่วไปที่ผลิตข้อมูลถูกส่งไปยังคลาสของคุณลายเซ็นควรมีลักษณะเช่นนี้:
public void pushAll(Collection<? extends E> producerCollection) {}
ดังนั้นประเภทอินพุตสามารถเป็น E หรือคลาสย่อยใด ๆ ของ E (E หมายถึงทั้งคลาสย่อยและคลาสของตัวเองในภาษาจาวา)
ในทางกลับกันคอลเลกชันทั่วไปที่ส่งผ่านเพื่อใช้ข้อมูลควรมีลายเซ็นดังนี้:
public void popAll(Collection<? super E> consumerCollection) {}
วิธีการที่ถูกต้องจะจัดการกับ superclass อีโดยรวมใด ๆ โดยใช้วิธีการนี้จะทำให้อินเตอร์เฟซของคุณน้อยที่น่าแปลกใจให้กับผู้ใช้ของคุณเพราะคุณจะสามารถที่จะผ่านในCollection<Number>
และCollection<Integer>
และมีพวกเขาได้รับการรักษาอย่างถูกต้อง
Collection<List<?>>
อะไร พูดคุยเกี่ยวกับการเข้ารหัสสยองขวัญ!