类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 ??
}
}
答案 0 :(得分:1)
在这种情况下,您将无法访问A的变量,因为此处A和B没有父/子或外部/内部类关系。
方法是将A的实例传递给B,例如
B b = new B(this);
为此,您需要调整构造函数以将A作为参数。
答案 1 :(得分:0)
正如您的代码一样,b
无法访问a
;仅仅是因为它没有对它的引用。
如果两个类是如此相关,以至于您需要b
来了解a
,则可以将B
设为A
的内部类:
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
是内部类。
请注意,此解决方案并非在所有情况下都适用,这会使两个类之间的耦合更加紧密。