どのように私は、このインターフェイスでこのメソッドをオーバーライドすることができます(コードを参照してください)?

匿名の開発者:

私はAと呼ばれるインタフェースを持っています:

public interface A { 
    void X(T t);
}

私は、このインタフェースを実装することを2つのサブクラス(B及びC)を有し、それらの各々は、Xの異なるタイプが言うBはタイプFOOを通過し、Cタイプのバーを通過することができ渡します。

public class B implements A {
    @Override
    public <T extends foo> void X(T type1)
}

public class C implements A {
    @Override
    public <T extends bar> void X(T type2)
}

私が間違って何をやっていると理由はない、この動作しますか?コンパイラは、「メソッドはスーパークラスのメソッドをオーバーライドしていない」と私に言って続けています。

前もって感謝します!

rgettman:

それらが上書きされた場合であっても、一般的な方法では、ジェネリック医薬品は正確に一致しなければなりません。

あなたの要件を満たしていない可能性があります一つの方法は、クラスを実装、例えば上の上限を削除することです

class B implements A {
    @Override
    <T> void X(T type1) { /* impl */ }
}

あなたは上限が必要な場合しかし、その後、上位インタフェース上の型パラメータにバインドさを表します。

interface A<U> { 
    <T extends U> void X(T t);
}

その後、上位実装するクラスにバインドの型引数を指定することができます。

class B implements A<Foo> {
    @Override
    public <T extends Foo> void X(T type1) { /* impl */ }
}

class C implements A<Bar> {
    @Override
    public <T extends Bar> void X(T type2) { /* impl */ }
}

あなたが上で呼び出すことができる何でもので、しかし、Tあなたはまた、上で呼び出すことができるFooBar、多分方法は、汎用である必要はありません。

interface A<T> { 
    void X(T t);
}
class B implements A<Foo> {
    @Override
    public void X(Foo type1) { /* impl */ }
}

class C implements A<Bar> {
    @Override
    public void X(Bar type2) { /* impl */ }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=137976&siteId=1