您好我正在阅读项目中的一些代码,我刚刚开始研究这些代码并看到一些我无法理解的代码。
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),那么这个方法的实现到底是什么?
谢谢!
答案 0 :(得分:2)
您的A
课程都是Ignite
个实例,并将Ignite
个实例作为字段。
它是一个符合特定接口的包装类。
它提供了一种方法来重用Ignite
实例(可能是另一个类的实例而不是A
),同时覆盖它的某些行为。
例如:
@Override
public <K, V> IgniteCache<K, V> createCache(CacheConfiguration<K, V> cacheCfg) {
checkIgnite();
return ignite.createCache(cacheCfg);
}
createCache()
实现依赖于包装createCache()
实例的Ignite
,但通过在checkIgnite()
类的A
方法之前调用来修改其行为。
答案 1 :(得分:1)
看起来有人试图在Java 8之前为接口构建默认方法。 当A有一个带有Ignite参数的构造函数时,你可以这样做:
IgniteCache<> cache = new A( someIgnite ).createCache( ... );
在Java 8中,您可以将createCache()直接作为Ignite的默认方法移动。
答案 2 :(得分:0)
如果我理解正确,你会询问IgniteSpringBean
课程。这是与Spring集成的包装器。此类封装逻辑以正确创建并销毁Ignite实例。还检查bean是否在方法调用时正确配置。