В Java, предположим, что у меня есть следующий класс контейнер, который содержит список классов предметов:Почему я не могу передать объект типа T методу на объект типа <? extends T>?
public class Container<T>
{
private List<Item<? extends T>> items;
private T value;
public Container(T value)
{
this.value = value;
}
public void addItem(Item<? extends T> item)
{
items.add(item);
}
public void doActions()
{
for (Item<? extends T> item : items)
{
item.doAction(value);
}
}
}
public abstract class Item<T>
{
public abstract void doAction(T item);
}
Eclipse, дает ошибку: The method doAction(capture#1-of ? extends T) in the type Item is not applicable for the arguments (T)
Я читала дженерики примеры и различные проводки вокруг, но я до сих пор не могу понять, почему это запрещено. Eclipse также не дает никаких полезных советов в предлагаемом исправлении. Переменная value
относится к типу T, почему бы не применимо к ? extends T
?.
Это имеет смысл. Я не рассматривал такое промежуточное задание. –