如何从所有者实例访问变量?



A的实例a具有类B的实例b

b如何访问a变量?

class A {
boolean flag;
B b;
public static void main(String[] args) {
A a = new A();
}
public A() {
b = new B();
b.doSomething();
chageFlag();
b.doSomething();
}
void changeFlag() {
// do something with flag
}
// other stuff
}
class B {
void doSomething() {
// here I need to access a from the instance owning b.
boolean aFlag = ?? // how to access a.flag ??
}
}

在这种情况下,您将无法访问 A 的变量,因为 A 和 B 在这里没有父/子或外部/内部类关系。

执行此操作的方法是将 A 的实例传递给 B,例如,

B b = new B(this);

为此,您需要调整构造函数以将 A 作为参数。

就像你的代码一样,b没有办法到达a;仅仅是因为它没有对它的引用。

如果这两个类非常相关,以至于你需要b了解a,那么你可以在AB成为一个内部类:

class A {
boolean flag;
B b;
public static void main(String[] args) {
A a = new A();
}
public A() {
b = this.new B();
b.doSomething();
changeFlag();
b.doSomething();
}
void changeFlag() {
}
class B {
void doSomething() {
boolean aFlag = flag;
}
}
}

B.doSomething()能够从封闭类中读取flagB因为它是一个内部类。

请注意,此解决方案并非适用于所有情况,它使两个类之间的耦合更加紧密。

最新更新