我对Java Generics功能有点新鲜。你可以帮我弄清楚为什么下面的代码片段不起作用:
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”
答案 0 :(得分:4)
让我们假设您使用以下API:
OtherRequest<OtherResponse> req = new OtherRequest<OtherResponse>();
OtherResponse res = foo(req);
你看到了问题吗?您的实现返回一个TestResponse,它不是OtherResponse的子类。