使用泛型实现类

时间:2012-04-17 15:44:36

标签: java generics

我对我正在进行的实施感到困惑。这是我想调用的方法

<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();

调用此帖子方法的方法具有此签名

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;
}

现在我对此方法的 return 类型感到困惑。它会保持 T 还是其他什么?如果我将它从T更改为WSRespons,我收到一个错误,我没有实现方法callPost

方法callPost被称为

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

P.S: 这是我第一次处理泛型

1 个答案:

答案 0 :(得分:1)

这种类型的方法 - <T> T method(things that don't mention T) - 几乎不是你想要做的,而且非常危险,因为它们不可避免地涉及可能不起作用的演员阵容 - 但你不会被警告直到它在运行时失败。我怀疑这个方法的返回类型应该是WSResponse,但是你的问题不够明确,我无法确定。