これを行う方法を理解したと思いましたが、予期しない動作が発生しているため、何かが欠けているようです。これが問題の煮詰めです。
基本クラス:
public abstract class Base<T>
{
abstract public void foo(List<? extends T> l);
}
派生クラス:
public class Derived<T> extends Base
{
@Override
public void foo(List<? extends T> l) { return; }
}
基本クラスは問題なく準拠していますが、派生クラスをコンパイルすると次のようになります。
Derived.java:3: Derived は抽象的ではなく、Base の抽象メソッド foo(java.util.List) をオーバーライドしません
public class Derived extends Base
^
Derived.java:5: メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません@Override ^
2 エラー
パラメータのジェネリックがList<? extends T>
問題の原因のようです。両方の署名のその部分を基本型に置き換えると、int
問題なく完了します。
ここで何が起こっているのか誰か教えてもらえますか?