java - 如何初始化循环依赖(final 字段相互引用)?

标签 java design-patterns reflection dependency-injection guice

你如何初始化它:

class A {
    final B b;

    A(B b) {
        this.b = b;
    }
}

class B {
    final A a;

    B(A a) {
        this.a = a;
    }
}

DI 框架、反射、更好的设计?

动机和用例(已添加):

我的特定用例是简化AB 子类中的字段访问。因此,我将它们注入(inject)到派生类中的字段中以快速引用它们,而无需在每个子类中显式声明。

还有关于 DI 的建议,对象最好是不可变的:Guice best practices and anti-patterns .

最佳答案

你可以使用工厂方法

class A {
    final B b;

    A(B b) {
        this.b = b;
    }
}

abstract class B {
    final A a;

    B() {
        this.a = constructA();
    }

    protected abstract A constructA();
}

public class C {
    public static void main(String []args){
        new B(){
            protected A constructA(){
                return new A(this);
            }
        };
    }
}

关于java - 如何初始化循环依赖(final 字段相互引用)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19808342/

相关文章:

java - 我的 Searchview 不起作用/给出 NullPointerException setSearchableInfo

java - 生命游戏,方法行不通

nhibernate - NHibernate 中的映射装饰器模式

design-patterns - 煮汤模式

java - newInstance() 的实例化异常

java - 使用 TestNG.xml 文件并行执行 2 个测试用例

java - 以反射方式访问匿名类实例中的任何类型的 "closure variable"

design-patterns - Vaadin:设计模式

c# - C#中的另一种获取属性名(这个是静态的)

c# - 如何在 C# 中通过字符串调用构造函数(即通过反射)?