【发布时间】:2018-03-27 17:13:14
【问题描述】:
我正在编写一个通用方法来处理通用接口的请求类型并返回通用响应。
以上是我的接口、方法和 Pojos。
public interface Request {
}
public interface Response {
}
public class MyRequest implements Request{
//SomeFields
}
public class MyResponse implements Response{
//SomeFields
}
现在,我正在编写一个请求处理程序,其中有一个方法
public <T extends Response, S extends Request> T handle(S request) {
String decoratedMsg = requestDecorator.writeAsJsonifiedString(request);
sqsAccessor.pushMessage(decoratedMsg,"SomeURL");
MyRequest myRequest = (MyRequest) request;
return (T) buildResponse(MyRequest);
}
private MyResponse buildResponse(MyRequest request) {
return new MyResponse();
}
上面代码的这个问题是我必须在调用私有方法buildResponse时转换我的响应,但我只是想知道在定义T时我指定了T扩展响应并且我的私有方法返回实现响应的MyResponse,所以为什么需要强制转换?
【问题讨论】:
-
T不一定是MyResponse。 -
尝试将
buildResponse的返回类型更改为Response。 -
如果
S是Request的某个子类型,但不是MyRequest,或T是Response的子类型,但不是MyResponse,您将收到ClassCastException。