この問題を回避するには、instanceof
を使用して型をチェックし、キャストを使用します。このように:
private void initialize(HttpRequestBase method)
{
if(method instanceof HttpPost)
{
String body = "body";
HttpEntity entity = new ByteArrayEntity(body.getBytes("UTF-8"));
((HttpPost) method).setEntity(entity);
}
}
キャストを使用するときはいつでも、より洗練されたソリューションがあると考えるべきです。この場合、私は、より洗練されたソリューションは、メソッドのオーバーロードを使用し、HttpPost
インスタンスに対して特定のメソッドを使用することであると主張します。もちろん
private void initialize(HttpPost method)
{
String body = "body";
HttpEntity entity = new ByteArrayEntity(body.getBytes("UTF-8"));
method.setEntity(entity);
}
これはあなたがHttpGet
用に別の方法(とあなたがサポートしたいHttpRequestBase
の他のサブクラスを)必要がありますを意味します。 GET
とPOST
の間で共有される共通コードは、両方ともinitialize()
メソッドによって呼び出されるより小さなメソッドに抽出する必要があります。
private void initialize(HttpGet method)
{
// ...
}
これは、もちろん、あなたは敗北にGET
とPOST
の両方のための1つのハンドラを作成しようとしているの全体のポイントを主張するかもしれません。そしてあなたは正しいでしょう。しかし、両方を扱う1つのメソッドを作成しようとする試み全体に疑問を呈してください。おそらく最もエレガントなデザインは、それらを別々に扱うことでしょう。結局のところ、それはあなたが選んだフレームワークの作者が何をするのかとまったく同じです。
あなたはあなたのif条件が決して真実ではないことを知っていますか?新しいオブジェクトと比較された既存のオブジェクト参照は 'false'を返します。 – RealSkeptic
ああ、そうです。どんなアプローチですか? –
'if(メソッドインスタンスHttpPost)' –