java genérico e curinga
Em java genérico eu entendi quais são os significados do curinga, super e estende, mas não entendi por que não me permite adicionar nada e por que me permite adicionar o SomeType na hierarquia, mas não acima na hierarquia?
class Animal {}
class Cat extends Animal{}
método @following pode ter uma lista de Animal ou sub de Animal, ou seja, Gato, mas nada mais e não tenho permissão para adicionar nada, se tentar adicionar, o compilador me interrompe por que?
void addAminal(List<? extends Aminal> aList){
aList.add(new Cat()); // compiler error
aList.add(new Animal()); // compiler error
}
Agora, o método a seguir pode levar qualquer lista de animais ou qualquer super tipo de animal, mas nenhum sub-tipo de animal, e eu posso adicionar objetos até Animal ou menos na hierarquia; portanto, quando tento adicionar Objeto, o compilador reclama por quê?
void addAnimal(List<? super Animal> aList){
aList.add(new Animal()); // no error
aList.add(new Cat()); // no error
aList.add(new Object()); // compiler error why ?
}
Obrigado Arya