函数式递归与番石榴?

Seb*_*ber -1 java recursion functional-programming guava

我有一个基本实现的MyService接口MyServiceImpl.我将其包装MyServiceImpl成一系列MyService装饰器.

为此,我创建了MyServiceDelegate一个抽象类,它接受一个MyService实例并将所有服务调用委托给提供的MyService实例.

但是在我的单元测试中,对于特定需求,我需要找回第一个真正的实现MyService,即MyServiceImpl,我只有一个MyService引用装饰器.

我只是想知道是否可以使用Guava,以功能性的方式进行递归,这将返回我已经装饰了很多层并且不是委托服务的"原始服务".我想使用像Function这样的函数来返回委托服务,如果是原始服务,则使用null,但不知道是否使用它.

我知道我可以通过while循环轻松完成,而且我不是在寻找替代解决方案.只想知道番石榴是否可以解决这些问题.

JB *_*zet 7

你甚至不需要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)