参数化返回值类型的问题

时间:2010-01-03 09:43:34

标签: java generics

我对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”

1 个答案:

答案 0 :(得分:4)

让我们假设您使用以下API:

OtherRequest<OtherResponse> req = new OtherRequest<OtherResponse>();
OtherResponse res = foo(req);

你看到了问题吗?您的实现返回一个TestResponse,它不是OtherResponse的子类。