Rozważmy kod:Wnioskowany typ nie jest prawidłową substytut dla porównywalnego typu rodzajowego
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);
}
}
Wezwanie sort daje błąd:
Bound mismatch: The generic method sort(List< T >) of type Collections is not applicable for the arguments (ArrayList< MyItem< T > >). The inferred type MyItem< T > is not a valid substitute for the bounded parameter < T extends Comparable< ? super T > >
dlaczego tak się stało?
Jeśli MyItem<V>
implementuje Comparable
, dlaczego nie jest substytutem?
Przepraszam, jeśli zostało to zadane, ale uważam, że to pytanie jest dość szczegółowe.
To było na miejscu. Twoje zdrowie! Dla wyjaśnienia uwzględniłem dodatkowe klasy, ponieważ podany przeze mnie kod jest znacznie bardziej uproszczoną wersją mojego rzeczywistego kodu i nie byłem pewien, gdzie jest problem. Całkowicie przegapiłem to, że mogłem po prostu zmienić samo porównanie. Dzięki jeszcze raz. – terrorcell
Lepiej: 'public abstract class Item implementuje porównywalne extends Item > '- nie? –