私はJavaのジェネリックスで問題が発生しましたが、同様の方法でジェネリックを使用している人のソリューションや例をオンラインで見つけることはできません。私は同じ要求/応答構造にあるメソッドのセットを持っています。たとえば、ユーザーがRequestオブジェクトのフィールドにデータを入力し、そのオブジェクトをヘルパメソッドに渡し、Responseオブジェクトが返されます。すべてのリクエストオブジェクトは、共通のリクエストスーパークラス(同様に、レスポンススーパークラスのレスポンスオブジェクト)から拡張されています。ヘルパークラスも一貫した構造にしたいので、インタフェースを使用しました。インタフェース内のJavaジェネリック
public class SuperRequest {
// ...
}
例リクエストサブクラス:
public class SubRequest extends SuperRequest {
// ...
}
応答スーパークラス:
public class SuperResponse {
// ...
}
例応答サブクラス:ここで...
リクエストスーパークラスを説明するためにいくつかのコードがあります
public class SubResponse extends SuperResponse{
// ...
}
インタフェース:
public interface SomeInterface {
public <T extends SuperRequest, U extends SuperResponse> U someMethod(T request);
}
あなたはインターフェースから見ることができるように、私はSuperRequest
の子であり、私はSuperResponse
の子であるオブジェクトを返すようにしたいオブジェクトを渡したいです。ここに私の実装です:Eclipseの
public class SomeImplementation implements SomeInterface {
@Override
public SubResponse someMethod(SubRequest request) {
return null;
}
}
コンパイラは、私が実装されていない方法と@Override
表記「スーパータイプのメソッドをオーバーライドしない」を持っている私に語ったので、私はコンパイルエラーを取得します。
誰でも私を助けることができますか?私の構文が間違っているのですか?どんな助けでも大歓迎です!これは、特定のサブクラスを選択することはできません
public <T extends SuperRequest, U extends SuperResponse> U someMethod(T request);
:現状では、SomeInterface
の実装はパラメータ化方法、すなわちを実装する必要があります
interface SomeInterface<T extends SuperRequest, U extends SuperResponse> {
public U someMethod(T request);
}
class SomeImplementation implements SomeInterface<SubRequest, SubResponse> {
@Override
public SubResponse someMethod(SubRequest request) {
return null;
}
}
恐ろしいですね!私はシンタックス/宣言についてちょっとだけ離れていたと感じました。助けてくれてありがとう! – ggrigery
問題なし、最良の回答を受け入れるようにしてください;) – ggreiner