如果我已正確理解泛型,則聲明爲參數<? super T>
的方法將接受任何類型爲T
或超類型T
的引用。我試圖用下面的代碼來測試它,但編譯器不喜歡它。Java泛型 - 超類型引用
class Animal{}
class Dog extends Animal{}
class Cat extends Animal{}
class ZiggyTest2{
public static void main(String[] args){
List<Animal> anim2 = new ArrayList<Animal>();
anim2.add(new Animal());
anim2.add(new Dog());
anim2.add(new Cat());
testMethod(anim2);
}
public static void testMethod(ArrayList<? super Dog> anim){
System.out.println("In TestMethod");
anim.add(new Dog());
//anim.add(new Animal());
}
}
編譯器錯誤是:
ZiggyTest2.java:16: testMethod(java.util.ArrayList<? super Dog>) in ZiggyTest2 cannot be applied to (java.util.List<Animal>)
testMethod(anim2);
^
1 error
我不明白爲什麼我不能在anim2傳遞,因爲它是<Animal>
型和動物是一個超級類型的狗。
感謝
<?延伸Dog>不允許修改集合。 – ziggy
它也不允許狗列表傳遞給測試方法。 –