Если я правильно понял обобщенные значения, метод с параметрами, объявленными как <? 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.
Спасибо