次のコードを検討してください。
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);
}
}
ソート呼び出しでエラーが発生します。
境界の不一致: Collections 型のジェネリック メソッド sort(List< T >) は、引数 (ArrayList< MyItem< T > >) には適用できません。推論された型 MyItem< T > は、境界付きパラメーター < T extends Comparable< ? スーパーT > >
なぜこれが間違っているのですか?
MyItem<V>
実装する場合Comparable
、なぜそれが代替品ではないのですか?
これが尋ねられた場合は申し訳ありませんが、質問はやや具体的だと思います。