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