将接口传递给实现此接口的类

时间:2017-06-20 13:58:55

标签: java class interface ignite implements

您好我正在阅读项目中的一些代码,我刚刚开始研究这些代码并看到一些我无法理解的代码。

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),那么这个方法的实现到底是什么?

谢谢!

3 个答案:

答案 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是否在方法调用时正确配置。