繁体   English   中英

如何在Java接口中使用泛型的泛型

[英]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 但是,您隐式地放置了类型参数DummyResponseDummyRequest ,并且没有像MyServicegetResponse方法那样声明类型参数RT

解决方案是将类型参数RT移到接口本身。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM