我猜你想是这样:
class MyService implements ContactsService {
@Override
public <T extends Response> T execute(Action<T> action) {
return (T)new GetDetailsResponse();
}
}
这样做的问题是,我可能有另一个类MyResponse实现响应。然后,我可以打电话:
Action<MyResponse> action = new Action<MyResponse>();
// you can't actually instantiate an interface, just an example
// the action should be some instance of a class implementing Action<MyResponse>
MyReponse r = myService.execute(action);
但execute方法返回GetDetailsResponse的实例,这与MyReponse不兼容。您需要返回类型T,该类型由您传递执行的操作给出。
据我可以告诉你不能在执行内部实例化类型T的新变量(不是没有一些未经检查的强制转换)。您可能需要动作类来为您提供一个可以从execute返回的Response实例。事情是这样的:
interface Response {
void setWhatever(String value);
}
interface Action<T extends Response> {
T getResponse();
}
class MyAction implements Action<GetDetailsResponse> {
@Override
public GetDetailsResponse getResponse() {
return new GetDetailsResponse();
}
}
class MyService implements ContactsService {
@Override
public <T extends Response> T execute(Action<T> action) {
T response = action.getResponse();
// do something to Response here like
response.setWhatever("some value");
return response;
}
}
接口名称后缺少''是一个错字? –
2010-07-14 09:55:06
固定缺失T – Shanta 2010-07-14 09:56:46
'Action'class/interface的签名是什么?向我们展示一个编译器警告的例子。 –
2010-07-14 10:39:28