? extends HasWord
หมายถึง "คลาส / อินเทอร์เฟซที่ขยายHasWord
" ในคำอื่น ๆHasWord
ของตัวเองหรือของเด็ก ... อะไรโดยทั่วไปที่จะทำงานร่วมกับบวกinstanceof HasWord
null
ในคำศัพท์ทางเทคนิคเพิ่มเติม? extends HasWord
สัญลักษณ์ตัวแทนมีขอบเขตซึ่งครอบคลุมในรายการ 31 ของEffective Java 3rd Editionเริ่มต้นที่หน้า 139 บทที่เดียวกันจากรุ่นที่ 2 มีให้บริการออนไลน์ในรูปแบบ PDF ; ส่วนของ wildcard ที่ถูกล้อมคือรายการที่ 28 เริ่มต้นที่หน้า 134
อัปเดต: ลิงค์ PDF ได้รับการอัปเดตตั้งแต่ Oracle ลบทิ้งไปครู่หนึ่ง ตอนนี้ชี้ไปที่สำเนาที่โฮสต์โดยคณะวิชาวิศวกรรมอิเล็กทรอนิกส์และวิทยาศาสตร์คอมพิวเตอร์ของมหาวิทยาลัย Queen Mary
อัปเดต 2: ให้รายละเอียดมากขึ้นว่าทำไมคุณต้องการใช้ไวด์การ์ด
ถ้าคุณประกาศวิธีการที่มีลายเซ็นคาดหวังให้คุณผ่านแล้วสิ่งเดียวที่คุณสามารถส่งผ่านเป็นList<HasWord>
List<HasWord>
อย่างไรก็ตามหากลายเซ็นดังกล่าวList<? extends HasWord>
นั้นคุณสามารถส่งList<ChildOfHasWord>
แทน
ทราบว่ามีความแตกต่างที่ลึกซึ้งระหว่างและList<? extends HasWord>
List<? super HasWord>
ดังที่ Joshua Bloch กล่าวไว้: PECS = โปรดิวเซอร์ - ขยาย - บริโภค - ยอดเยี่ยม
สิ่งที่หมายถึงนี้ก็คือว่าถ้าคุณจะผ่านในคอลเลกชันที่วิธีการของคุณดึงข้อมูลออกจาก (เช่นคอลเลกชันคือการผลิตองค์ประกอบสำหรับวิธีการของคุณเพื่อใช้งาน) extends
คุณควรใช้ หากคุณกำลังผ่านในคอลเลกชันที่วิธีการของคุณเพิ่มข้อมูลไป (เช่นคอลเลกชันที่มีการบริโภคองค์ประกอบวิธีการของคุณสร้าง) super
ก็ควรใช้
นี่อาจฟังดูสับสน อย่างไรก็ตามคุณสามารถเห็นมันในList
's sort
คำสั่ง (ซึ่งเป็นเพียงทางลัดไปยังรุ่นสองหาเรื่องของ Collections.sort ก) แทนการก็จริงยิงComparator<T>
Comparator<? super T>
ในกรณีนี้เครื่องมือเปรียบเทียบใช้องค์ประกอบของรายการList
เพื่อเรียงลำดับรายการใหม่