如果我正确理解了泛型,则声明为参数的方法<? super T>
将接受任何类型T
的引用或T
. 我正在尝试使用以下代码对此进行测试,但编译器不喜欢它。
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>
,而 Animal 是 Dog 的超级类型。
谢谢