我可以编译两个彼此需要的类吗?

时间:2019-06-06 05:02:28

标签: java import cyclic-dependency

我正在制作一个包,其中有两个相互导入的类。

它将起作用吗?我正在做的事情是这样的:

package com;
import com.B;

class A {

     private B b;

}

package com;
import com.A;

class B {
    private A a;
}

如果这行得通,是否有任何类似的方法或案例不起作用? (就像在两个类中都具有使另一个类的对象成为对象的构造函数一样?)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

它确实有效,您可以亲自尝试一下。不过,通常最好避免使用循环引用,因为它们会使设计复杂化。

如果不小心,很容易在代码中引起无限循环。例如,如果您在两侧调用另一个类的构造函数,它将编译得很好,但是将以java.lang.StackOverflowError结尾;与直接或间接来回的任何(组合)呼叫相同。

我已经对您的示例进行了扩展,以证明您可以很好地进行编译和运行。

package com;
public class A {
    private B b;

    public A() {
        b = new B();
    }

    public static void main(String... args) {
        (new A()).print();
    }

    public void print() {
        System.out.println(b.getText());
    }
}
package com;
public class B {
    private A a;

    public B() {
        //a = new A();
    }

    public String getText() {
        return "Hello, world";
    }
}