[英]How to use generics of generics in java interfaces
我正在尝试为我的基本服务编写一个通用接口。 这是我完全尝试过的:
假设我们有一个请求和响应对象。 每个请求类型必须绑定到一个响应类型,因此我们可以处理请求的响应类型。
abstract class Response {
}
abstract class Request<R extends Response> {
}
现在让我们写一些关于它们的实现:
class DummyResponse extends Response {
}
class DummyRequest extends Request<DummyResponse> {
}
好的,我们有实现。 让我们深入研究我苦苦挣扎的界面:
interface MyService {
<R extends Response, T extends Request<R>> R getResponse(T request);
}
当实现此MyService时,出现错误:
class MyServiceImpl implements MyService {
//these method gives me error
@Override
public DummyResponse getResponse(DummyRequest request) {
//do sth
return response;
}
}
那我为什么要这样做呢? 因为我想用自己的请求和响应对象编写许多服务实现,所以我可以从一个角度处理它们-服务接口。
如何使用接口来做到这一点? 还是错误的方法? 真正的方法是什么?
提前致谢。
要正确实现MyService
接口,必须提供与类型参数匹配的通用方法getResponse
。 但是,您隐式地放置了类型参数DummyResponse
和DummyRequest
,并且没有像MyService
的getResponse
方法那样声明类型参数R
和T
解决方案是将类型参数R
和T
移到接口本身。
interface MyService<R extends Response, T extends Request<R>> {
R getResponse(T request);
}
然后, MyServiceImpl
可以在实现MyService
时为其提供类型参数,而getResponse
可以使用这些类型参数来成功实现getResponse
方法。
class MyServiceImpl implements MyService<DummyResponse, DummyRequest> {
// This now implements MyService correctly.
@Override
public DummyResponse getResponse(DummyRequest request) {
//do sth
return response;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.