作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这更多的是一个理论问题。假设我有3个类A、B和C。我想做的是这样的:
public class A {
B b = new B(c);
C c = new C(b);
}
public class B {
public B(C c) {
}
}
public class C {
public C(B b) {
}
}
我知道这段代码行不通。那么,还有其他方法吗?
最佳答案
有很多方法可以解决这个问题,但没有一种是理想的:
延迟构建方法:
B b = new B();
C c = new C();
b.setC(c);
c.setB(b); // until this point, initialization is not complete
打破循环的方法:
B b = new B(); // B is not fully initialized until later
C c = new C(b);
b.setC(c); // everything set
一对一的方法:
B b = new B(); // internally initializes its 'C' instance
C c = b.getC(); // uses the C instance set by B
// inside B
public B() {
c = new C(this); // leaking 'this' in constructor, not ideal
}
然后是推荐方式(TM):
D d = new D(); // isolates what B needs from C and C needs from B
B b = new B(d);
C c = new C(d);
这是基于这样的观察:B
和 C
通常不需要完全相互依赖 - 您可以采用公共(public)部分并将其隔离D
,并分享那个。
关于Java:如何在第三个类中创建两个不同类的实例并通过构造函数相互传递引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24548246/
我是一名优秀的程序员,十分优秀!