タイプが異なるだけで、本質的に同じことを行う 2 つのメソッドがあります。この機能をいくつかの汎用メソッドに抽象化したいのですが、デリゲートを使用して C# で簡単に実行できると思いますが、Java で同等のものを知りません。makeWhateverRequest
ここでは 2 つのメソッドのみを示していますが、スタイルの異なるメソッドがいくつか (8 つほど) あります。ここに私の方法があります:
public State makeGetRequest(User user, String name) {
Get request = Builder.getGetRequest(user, name);
GetResponse response = service.get(request);
return ResponseTypeFactory.getResponseType(response);
}
public State makePutRequest(User user, String name) {
Put request = Builder.getPutRequest(user, name);
PutResponse response = service.put(request);
return ResponseTypeFactory.getResponseType(response);
}
User
(各メソッドの最初の行のように) aと aを取るデリゲートのようなものがあれば、String
その行はジェネリック メソッドに抽象化できます。ただし、最初の行は異なる値 (つまり、 または のいずれかのインスタンス) を返し、Get
このPut
値は 2 行目で使用されることに注意してください。各メソッドの最後の行はすでに同じで、ポリモーフィズムを使用してどのバージョンのgetResponseType
を呼び出すかを判断しているので、問題ありません。
1 つの問題は、別のメソッドを呼び出す必要がある各メソッドの 2 行目にあります。Get
おそらく、実装と実装の両方を行ういくつかのインターフェイスを用意しPut
、そのインターフェイスのインスタンスを取るデリゲートのようなものを必要とすることができます。次に、GetResponse
との両方PutResponse
が別のインターフェイスを実装する可能性があり、getResponseType
そのインターフェイスのインスタンスを取る があることを確認できます。
Get
Put
共通の基本クラスから継承しますRequest
。 共通の基本クラスから継承しGetResponse
ます。おそらく、これらの基本クラスを抽象化して、異なるインターフェイスを持つ代わりに、必要な抽象基本クラスのインスタンスを取るメソッドを持つことができます。PutResponse
Response
私は Java にあまり詳しくないので、C# で行うのと同等の方法を知りません。助けてくれてありがとう。
編集: どのインターフェースが必要になるかについての私の考えは次のとおりです。
IRequest IResponse
| \ | \
Get Put GetResponse PutResponse
次に、これらのメソッドが必要になります。
Builder.getRequest(User, String)
=> IRequest
service.getPut(IRequest)
=> IResponse
ResponseTypeFactory.getResponseType(IResponse)
=> State