? extends HasWord
หมายถึง "คลาส / อินเทอร์เฟซที่ขยายHasWord" ในคำอื่น ๆHasWordของตัวเองหรือของเด็ก ... อะไรโดยทั่วไปที่จะทำงานร่วมกับบวกinstanceof HasWordnull
ในคำศัพท์ทางเทคนิคเพิ่มเติม? 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เพื่อเรียงลำดับรายการใหม่