Рассмотрим код:
public abstract class Item<T> implements Comparable<T>
{
protected T item;
public int compareTo(T o)
{
return 0; // this doesn't matter for the time being
}
}
public class MyItem<T> extends Item<String>
{
T object;
}
public class Foo<T>
{
protected ArrayList<T> list;
}
public class Bar<V> extends Foo<MyItem<V>>
{
public void sort()
{
Collections.sort(list);
}
}
Вызов сортировки дает ошибку:
Связанное несоответствие: общий тип метода (List <T> ) типа Collections не применим для аргументов (ArrayList < MyItem < T → ). Выведенный тип MyItem <T> не является допустимым подстановкой для ограниченного параметра < T расширяет Сопоставимый <? super T →
Почему это неправильно?
Если MyItem<V>
реализует Comparable
, то почему он не заменяет?
Извините, если это было задано, но я чувствую, что вопрос несколько конкретный.