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

时间:2019-12-14 20:01:24

标签: java

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 ??
    }
}

2 个答案:

答案 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是内部类。

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

相关问题