0

私が取り組んでいる実装については、ちょっと混乱しています。これは私が呼び出すと思われるメソッドです

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

ここで、ContentBuilderとresponsehandlerに使用されるクラスをいくつか作成する必要があります。注目すべきはリターンタイプTです。

抽象クラスWSResponseを作成し、それを拡張しMyWSResponseて、応答ハンドラーが次のようになるようにしました。

ResponseHandler <WSResponse> rh = new MyWSResponse();

このpostメソッドを呼び出しているメソッドにはこのシグネチャがあります

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は次のように呼び出されています

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

PS:ジェネリック医薬品を扱うのはこれが初めてです

4

1 に答える 1

1

このタイプのメソッドは -- <T> T method(things that don't mention T)-- やりたいことはほとんどなく、非常に危険です。おそらく機能しないキャストが必然的に含まれるためです。しかし、実行時に失敗するまで警告は表示されません。このメソッドの戻り値の型はただWSResponse.

于 2012-04-17T16:17:30.627 に答える