簡體   English   中英

使用Guava進行功能樣式遞歸?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM