簡體   English   中英

將接口傳遞給實現此接口的類

[英]pass interface to a class which implements this interface

嗨,我正在閱讀一個項目中的一些代碼,我剛剛開始工作,看到一些這樣的代碼,我無法理解。

public class A implements Ignite {
    protected Ignite ignite;
    .......
    protected void checkIgnite() {
        ......
    }

    @Override 
    public <K, V> IgniteCache<K, V> createCache(CacheConfiguration<K, V> cacheCfg) {
        checkIgnite(); 
        return ignite.createCache(cacheCfg);
    } 

}

我不明白這堂課的意思。

首先,此類A是要實現Ignite接口,然后為什么將Ignite接口傳遞給此類?

其次,對於類A中的createCache方法,它將返回ignite.createCache(cacheCfg),那么此方法的實現究竟是什么?

謝謝!

您的A類既是Ignite實例,又包含Ignite實例作為字段。
它是符合特定接口的包裝器類。

它提供了一種重用Ignite實例(可能是A之外的其他類的實例),同時覆蓋其某些行為的方式。

例如這里:

@Override 
public <K, V> IgniteCache<K, V> createCache(CacheConfiguration<K, V> cacheCfg) {
    checkIgnite(); 
    return ignite.createCache(cacheCfg);
} 

createCache()實現依賴於包裝的Ignite實例的createCache() ,但通過在A類的checkIgnite()方法之前調用來修改其行為。

看起來有人試圖在Java 8之前為接口構建默認方法。當A具有帶有Ignite參數的構造函數時,您可以這樣做:

IgniteCache<> cache = new A( someIgnite ).createCache( ... );

在Java 8中,您可以將createCache()作為默認方法直接移動到Ignite。

如果我理解正確,那么您會詢問IgniteSpringBean類。 這是與Spring集成的包裝器。 此類封裝了用於正確創建和銷毀Ignite實例的邏輯。 它還檢查在方法調用中是否正確配置了bean。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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