假設我們有2個不同的列表。列表泛型協變
列表1可以接受任何Number參數(包括int,double,float和Number的子類的其他所有內容)。
List<Number> l1 = new ArrayList();
因此,這樣做的作品非常好。
l1.add(123);
l1.add(123.3456);
List 2 extends Number。問題是我不能添加任何東西,我不明白爲什麼。另外,爲什麼我會需要一個列表<?擴展Something>而不是僅僅創建一個層次最高的類的列表,可以存儲任何子類(如列表1)?
List<? extends Number> l2 = new ArrayList();
l2.add(123); //Error, although Integer is a subclass of Number
l2.add(new Integer(123)); // Wrappers don't work either
l2.add(123.456); //Error again
查找術語PECS(生產者延伸,超級消費者)。 Java方差「聲明」是在使用時完成的,而不是類定義時間 –