2012-04-17 110 views
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();

这是调用这个方法,该方法有此签名

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: 这是我第一次处理泛型这种类型的

+0

方法callPost(..)来自哪里? – AndrewC 2012-04-17 16:48:41

+0

看到我的编辑... – 2012-04-17 16:54:00

回答

1

方法 - <T> T method(things that don't mention T) - 几乎从来没有要什么做,而且是非常危险的,因为它们不可避免地涉及可能不起作用的演员阵容 - 但是,除非在运行时失败,否则您不会受到警告。我嫌疑人该方法的返回类型应该只是WSResponse,但你的问题不够清楚,我可以肯定。

+0

我不能改变我正在实施的API中的东西。看我的编辑。 – 2012-04-17 16:54:23

+2

嗯。好的。那个界面真的非常危险,你应该抱怨。除此之外 - 除了危险演员之外,你无能为力。 – 2012-04-17 17:36:25

+0

所以我是正确的,当我第一次指出这**高级**开发者!感谢帮助 :) – 2012-04-17 20:47:53