如果我已正确理解泛型,则声明为参数<? 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
它也不允许狗列表传递给测试方法。 –