[英]Functional style recursion with Guava?
我有一個帶有MyServiceImpl
基本實現的MyService
接口。 我將MyServiceImpl
包裝到MyService
裝飾器鏈中。
為此,我創建了一個MyServiceDelegate
,它是一個抽象類,采用一個MyService
實例並將所有服務調用委派給提供的MyService
實例。
但是在我的單元測試中,出於特定需要,我需要找到MyService
的第一個實際實現,即MyServiceImpl
,並且我只有一個MyService
引用裝飾器。
我只是想知道番石榴是否有可能以一種實用的方式進行遞歸,該遞歸將使我得到“原始服務”,該“原始服務”已經裝飾了很多層,而不是委托服務。 我想使用像Function這樣的函數來返回委托服務,如果它是原始服務,則返回null,但是不知道要使用它。
我知道我可以用while循環輕松地做到這一點,而且我不是在尋找替代解決方案。 只想知道番石榴是否可以解決這類問題。
您甚至不需要while循環或番石榴。 只需在您的界面中添加以下方法:
public MyService undecorate();
然后在委托中執行以下實現:
return decoratedService.undecorate();
而以下實現則在“真實”實現中:
return this;
如果無法修改接口,請從外部進行操作:
public MyService undecorate(MyService service) {
if (service instanceof MyServiceDelegate) {
return undecorate(((MyServiceDelegate) service).getDecoratedService());
}
else {
return service;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.