类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
,那么你可以在A
中B
成为一个内部类:
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()
能够从封闭类中读取flag
B
因为它是一个内部类。
请注意,此解决方案并非适用于所有情况,它使两个类之间的耦合更加紧密。