Метасимвол > в дженериках
Animal - абстрактный класс, Cat - наследник Animal. Есть класс, параметризованный абстрактным классом Animal:
public class AnimalCage<T extends Animal> {
/**
* Вместимость
*/
private int capacity;
/**
* Коллекция для хранения животных
*/
private ArrayList<T> animals;
public AnimalCage(int n) {
this.capacity = n;
animals = new ArrayList<>(n);
}
/**
* Садим животное типа T в клетку
* @param a - животное, которым параметризован объект клетки
*/
public void add(T a) {
animals.add(a);
}
В main объявляем клетку:
AnimalCage<? extends Animal> someCage;
Но инициализируем её как:
someCage = new AnimalCage<Cat>;
Все работает. Но при попытке положить в someCage объект класса Cat выдает ошибку:
someCage.add(cat);
Скорее всего, в моей голове - недопонимание, помогите, пожалуйста, разобраться.
Ответы (1 шт):
Автор решения: Adm123
→ Ссылка
В приведенном примере для сажания в клетку котов Вы должны объявить ее как AnimalCage<Animal> или AnimalCage<? super Animal>.
Вот тут почитайте
