2

私の実装は次のようになります。

@Override
public <T extends AlgorithmSuperType> T doSomethingSmart(){
    //do this and that
}

この一般的な戻り値のインターフェイスを定義するにはどうすればよいですか? Eclipse では、このインターフェース定義を推奨しています。

T doSomethingSmart();

クイック フィックスを受け入れると、Eclipse は問題を検出し、先頭に<T>.

<T> T doSomethingSmart();

これらのインターフェースの迅速な修正は、@Override 実装の競合を解決しません。

インターフェイスを適切に定義する方法の手がかりはありますか?

4

3 に答える 3

3

インターフェイスは次のようになります。

interface YourInterfaceName {
    <T extends AlgorithmSuperType> T doSomethingSmart();
}

これは、実装が定義するジェネリックメソッドを持つインターフェイスを定義します。

于 2013-08-25T16:23:12.330 に答える
1

はジェネリック パラメータであるためT、メソッドまたはクラスをジェネリックにして、パラメータとして宣言する必要があります。Eclipse は最初の代替案を提案しています。2番目の方法は次のとおりです。

public class<T extends AlgorithmSuperType> MyClass implements SomeInterface<T> {
    @Override
    public T doSomethingSmart(){
        //do this and that
    }
}

インターフェイスは次のいずれかである必要があることに注意してください

public interface<T extends AlgorithmSuperType> SomeInterface {
    T doSomethingSmart();
}

また

public interface SomeInterface {
    <T extends AlgorithmSuperType> T doSomethingSmart();
}

(後者の場合MyClassimplements SomeInterface<T>.

于 2013-08-25T16:23:44.043 に答える
0

インターフェイスの場合は、次を使用できます。

AlgorithmSuperType fetchAlert();

ただし、T だけでなく、この型から継承する他のすべてのクラスも問題ありません。

于 2013-08-25T16:24:37.347 に答える