我正在讀一本書:Java泛型和由maurice和philip收集。混淆泛型和集合中的句子Java
有一句話我認爲這是錯誤的: 他們都給予了代碼:
和的一句話是:
的古怪的短語?超級T表示所述目的地列表可以 具有任何類型的爲T的超類型的元件,正如源 列表可以具有任何類型,它是T.
AFAIK的子類型,該? super T
的元件意味着目的地列表可以具有T及其子類型的元素。 我在這裏測試此:
List<? super Dog> tList = new ArrayList<>();
tList.add(new Dog());
tList.add(new HotDog());
其中tList.add(new Animal());
是不允許的。 注意HotDog extends Dog
和Dog extends Animal
因此,如果我們根據書中聲明,它說TLIST(目標列表),是? Super Dog(? super T)
,可以有動物的例子,因爲它是狗的超類型(T)去
它可能更清晰。它實際上意味着'dst'的泛型類型參數必須是'T'的超類型,以便它可以接受放入其中的任何子類型'T'的對象。用一句話很難解釋清楚。 – khelwood