【问题标题】:Interface extending multiple interfaces接口扩展多个接口
【发布时间】:2020-06-02 17:52:05
【问题描述】:

我正在使用 spring 并且有 2 个接口,

interface A {
    public void a();
}

interface B {
    public void B();
}

及其实现

class AImpl implements A {
    public void a(){ // TODO }
}
class BImpl implements B {
    public void b(){ // TODO }
}

现在我创建一个接口 C

    interface C extends A, B {}

有什么方法可以让我得到一个方法定义为 AImpl 和 BImpl 的 C 类型的 bean

【问题讨论】:

    标签: spring interface spring-bean


    【解决方案1】:

    您不能创建扩展 AImpl 和 BImpl 的 CImpl,因为 Java 不支持类的多重继承。

    但你可以这样做:

    class CImpl implements C {
        private A a;
        private B b;
    
        public CImpl(A a, B b) {
            this.a = a;
            this.b = b;
        }
    
        public void a() {
            a.a();
        }
    
        public void b() {
            b.b();
        }
    }
    

    并使用以下命令创建您的 CImpl:

    CImpl c = new CImpl (new AImpl(), new BImpl());
    

    如果您使用 Spring(正如您的标签所暗示的那样),您可以将 AImpl、BImpl 和 CImpl 配置为 Bean,并为 CImpl 的构造函数使用自动装配。

    【讨论】:

    • 我知道我们不能直接扩展实现(因为有多个)。但是既然我已经提供了这些接口(A&B)的实现,那么spring是不是不可能创建一个C的对象呢?这就是在spring jpa中创建自定义仓库时会发生的情况。
    猜你喜欢
    • 2015-10-16
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 2015-08-09
    • 2018-11-28
    相关资源
    最近更新 更多