Java 参数化返回值类型存在问题

Java 参数化返回值类型存在问题,java,generics,Java,Generics,我对Java泛型特性有些陌生。您能帮我找出下面的代码段不起作用的原因吗: interface Response {} interface Request<T extends Response> {} class TestResponse implements Response {} class TestRequest implements Request<TestResponse> {} <T extends Response> T foo(Reques

我对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;
}
接口响应{}
接口请求{}
类TestResponse实现响应{}
类TestRequest实现请求{}
T foo(请求b){
TestResponse tr=新的TestResponse();
返回tr;
}

我觉得一切都很好:返回值类型实现了响应接口,但是编译器不同意:“类型不匹配:无法从TestResponse转换为T”

让我们想象一下API的以下用法:

OtherRequest<OtherResponse> req = new OtherRequest<OtherResponse>();
OtherResponse res = foo(req);
OtherRequest req=新的OtherRequest();
其他响应res=foo(req);

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

我认为您在implements/extends关键字方面有一些问题。在该方法中,T类型应该扩展响应,但TestResponse实现了请求(该请求具有可以从响应扩展的类型)。我认为您的接口和类型通配符可以用另一种方式完成。