チュートリアルで、次の署名を使用した例を作成しました (インターフェイスの一部として)。
<T> List<Comparable<T>> sort(Collection<Comparable<T>> c, boolean ascending);
警告なしでそのメソッドを実装することはほぼ不可能であることがわかりました。
public <T> List<Comparable<T>> sort(Collection<Comparable<T>> c, boolean ascending) {
List<T> list = new ArrayList<T>();
Collections.sort(list);
return list;
}
表示される行のエラーCollections.sort(list)
は次のとおりです。
Bound mismatch: The generic method sort(List<T>) of type Collections is not
applicable for the arguments (List<T>). The inferred type T is not a valid
substitute for the bounded parameter <T extends Comparable<? super T>>
ただし、次の署名では機能します。
<T extends Comparable<T>> List<T> sort(Collection<T> c, boolean ascending);
その署名により、上記のコード (の実装sort
) は期待どおりに機能します。その理由は何なのか知りたいです。