2017-02-21 7 views
1

TLDR:拡張後に汎用インターフェイス定義を厳格にしたいと考えています。ジェネリックインターフェイスを拡張してJavaでより厳密にする

操作とリクエスト/レスポンスオブジェクトが操作できるとします。

すべての操作にメソッドを実行させる必要がある基本インターフェイスを定義しました。

public interface Operation<S, T> { 
    T execute(S request); 
} 

特定の操作用の他のインターフェイスの束に拡張したいと考えています。例えば

public interface ReadOperation<S extends ReadRequest, T extends ReadResponse> extends Operations { 
    T execute(S readRequest); 
} 

通常、私はインターフェイスを拡張する際に厳格な定義と定義を実行上書きベースインタフェースしたいと思います。しかし残念ながら、Javaは新しい実行定義でオーバーロードされたメソッドを追加するため、達成できません。

私のの直観はどこにあるのか、また他の形式ではどのように達成できるのか理解したいと思います。私がそれをひどく間違ってやっているか教えてください。

一番近い私がここで見つけることができます:あなたは、生のタイプを使用しているので、Overriding a method contract in an extended interface that uses generics (Java)?

+0

このケースではどのようなケースですか?これが何のために良いのかはっきりしていません。いくつかの使用例を提供できますか? –

+0

@JimGarrison上記の使用法の1つが明確である必要があります。すべてのタイプの操作に対して実行を強制したいのですが、操作の性質上、それらを操作できるさまざまな種類の有界オブジェクトが必要です。それは事を少しはっきりさせるか、具体的な例がもっと役立つでしょうか? – rajneesh2k10

答えて

3

問題があります。拡張Operationインターフェイスにジェネリックタイプを提供しないので、コンパイラはSTがそれぞれ同じものであることを認識しません。 ReadOperationを次のように変更してください。

public interface ReadOperation<S extends ReadRequest, T extends ReadResponse> extends Operation<S, T> { 
    T execute(S readRequest); 
} 
+0

これはまさに私がやりたかったことです。早速のご返事ありがとうございます。 – rajneesh2k10

関連する問題