Seb*_*ber -1 java recursion functional-programming guava
我有一个基本实现的MyService接口MyServiceImpl.我将其包装MyServiceImpl成一系列MyService装饰器.
为此,我创建了MyServiceDelegate一个抽象类,它接受一个MyService实例并将所有服务调用委托给提供的MyService实例.
但是在我的单元测试中,对于特定需求,我需要找回第一个真正的实现MyService,即MyServiceImpl,我只有一个MyService引用装饰器.
我只是想知道是否可以使用Guava,以功能性的方式进行递归,这将返回我已经装饰了很多层并且不是委托服务的"原始服务".我想使用像Function这样的函数来返回委托服务,如果是原始服务,则使用null,但不知道是否使用它.
我知道我可以通过while循环轻松完成,而且我不是在寻找替代解决方案.只想知道番石榴是否可以解决这些问题.
你甚至不需要while循环或番石榴.只需在界面中添加以下方法:
public MyService undecorate();
Run Code Online (Sandbox Code Playgroud)
然后在委托中执行以下实现:
return decoratedService.undecorate();
Run Code Online (Sandbox Code Playgroud)
以及"实际"实现中的以下实现:
return this;
Run Code Online (Sandbox Code Playgroud)
如果无法修改接口,请在外部执行:
public MyService undecorate(MyService service) {
if (service instanceof MyServiceDelegate) {
return undecorate(((MyServiceDelegate) service).getDecoratedService());
}
else {
return service;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
452 次 |
| 最近记录: |