我对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的子类。

09-12 11:37