เหตุใดฉันจึงได้รับข้อผิดพลาดของคอมไพเลอร์ด้วยโค้ด Java นี้
1 public List<? extends Foo> getFoos()
2 {
3 List<? extends Foo> foos = new ArrayList<? extends Foo>();
4 foos.add(new SubFoo());
5 return foos;
6 }
โดยที่ 'SubFoo' เป็นคลาสที่เป็นรูปธรรมที่ใช้ Foo และ Foo เป็นอินเทอร์เฟซ
ข้อผิดพลาดที่ฉันได้รับจากรหัสนี้:
- ออนไลน์ 3: "ไม่สามารถยกตัวอย่าง ArrayList‹ ได้ขยาย Foo›"
- ออนไลน์ 4: "วิธีการ add(capture#1-of ? extends Foo) ในประเภท List‹capture#1-of ? extends Foo› ไม่สามารถใช้ได้กับอาร์กิวเมนต์ (SubFoo)"
อัปเดต: ขอบคุณ Jeff C ฉันสามารถเปลี่ยนบรรทัด 3 เป็นพูดว่า "new ArrayList‹Foo›();" แต่ฉันยังคงมีปัญหากับสาย 4