Это означает, что две коллекции не могут иметь одинаковые границы типов:
CollectionGeneric<? extends Animal> animalsCollectionGeneric =
new CollectionGeneric<Animal>();
List<? extends Animal> animals = getAnimals()
Первый может иметь во время выполнения CollectionGeneric<Tiger>
, а второй List<Gnu>
. Смешивая их, вы потеряете безопасность типов (не говоря уже о бойне).
Поэтому вам нужно доказать компилятору, что эти два связаны, поэтому ваши общие подписи должны быть:
public void setBeans(List<? extends T> beans) {}
public List<T> getBeans();
и используется как:
List<? extends Animal> beans = getBeans();
GenericCollection<Animal> animals = new GenericCollection<Animal>();
animals.add(beans);