java通过接口打破Python中的循环依赖
下面的代码可用于打破Java中的循环依赖关系
什么是蟒蛇式的方式
interface A {
int A1();
}
class X implements A {
B b;
public int X1() {
b = B(this);
b.doSomething();
}
public int A1() { ... }
}
class B {
A a;
public B(A a) {
this.a = a;
}
public doSomething() {
//...
this.a.A1();
//...
}
}
# 1 楼答案
实现这一点最简单、也是最具python风格的方法是依赖duck类型,因此依赖关系在静态代码中不显式,也不存在循环性
在Java中需要接口的原因是,Java强制} 作为接口,可以,但它实际上并不能为您带来任何好处。最好让鸭子变成鸭子:
B
类为其a
成员提供静态类型,同样地,为其构造函数提供a
参数。Python中不需要这样做,因为变量没有类型(值当然有,但任何变量都可以包含任何类型的值)。如果您想显式强制检查,您可以使用^{当然,仍然存在动态循环,但这不是问题。(嗯,循环引用可能是个问题,但通常不是,这不是您担心的问题,它与Java没有什么不同……)