2012-04-17 10 views
0

私は、現在取り組んでいる実装について混乱しています。私が思うのです。この方法は、今私はContentBuilderとするResponseHandlerのために使用されるクラスのカップルを記述する必要がGenericsを使用してクラスを実装する

<I, O, T> T post(String url, I data, ContentBuilder<I, HttpEntity> contentBuilder, ResponseHandler<? extends T> responseHandler);

呼び出します。通知されるものは返品タイプTです。

は、私は私の応答ハンドラーが

ResponseHandler <WSResponse> rh = new MyWSResponse();

このポストメソッドを呼び出している方法のように見えることは、このシグネチャを持つ抽象クラスWSResponseを書いた後、MyWSResponseそれを拡張

public interface GPCl{ 
    public <T> T callPost (String data) 
} 

...

public <T> T callPost(String data){ 
    HttpWebServiceClient client = getHttpWSClient(); 
    ContentBuilder<String, HttpEntity> contentBuilder = new MyXMLBuilder(); 
    ResponseHandler<WSResponse> rh= new MyWSResponse(); 

    WSResponse wsResponse = client.post("", data, contentBuilder, rh); 
    return (T)wsResponse; 
} 

今私はこのメソッドの返信で混乱しています。それはTまたはそれ以外のものに残りますか?私がTからWSResponsに変更すると、私はメソッドcallPostを実装していないというエラーが出ます。

方法callPostはPS

GPClient cl = new GPClient(myhttpParams); 
cl.callPost(d) 

と呼ばれている: - <T> T method(things that don't mention T) - これは私がジェネリックこのタイプの

+0

callPost(..)メソッドはどこから来ていますか? – AndrewC

+0

私の編集を参照してください... –

答えて

1

方法で取り扱っております初めてです あなたがしたいものはほとんどされることはありませんおそらく動作しないキャストが必然的に含まれているため、非常に危険ですが、実行時に失敗するまでは警告を受けません。私容疑者このメソッドの戻り値の型はちょうどWSResponseであるはずですが、あなたの質問が確実であるかどうか不明です。

+0

私は実装しているAPIのものを変更することはできません。私の編集を参照してください。 –

+2

郵便番号。はい。そのインターフェースは本当に危険なものであり、あなたは文句を言うべきです。それ以外に、危険なキャスト以外に何もできないものがあります。 –

+0

私は最初にこれを**上級**開発者に指摘したとき、私は正しかった!手伝ってくれてありがとう :) –

関連する問題