我对Java泛型功能有些陌生。您能帮我弄清楚为什么下面的代码片段不起作用:
interface Response {}
interface Request<T extends Response> {}
class TestResponse implements Response {}
class TestRequest implements Request<TestResponse> {}
<T extends Response> T foo(Request<T> b) {
TestResponse tr = new TestResponse();
return tr;
}
对我来说,一切似乎都很好:返回值类型实现了Response接口,但是编译器不同意:“类型不匹配:无法从TestResponse转换为T”
最佳答案
让我们想象一下您的API的以下用法:
OtherRequest<OtherResponse> req = new OtherRequest<OtherResponse>();
OtherResponse res = foo(req);
你看到问题了吗?您的实现返回一个TestResponse,它不是OtherResponse的子类。