Java 我可以编译两个相互需要的类吗?

Java 我可以编译两个相互需要的类吗?,java,import,cyclic-dependency,Java,Import,Cyclic Dependency,我正在制作一个包,其中有两个类相互导入 行吗?我正在做的事情是这样的: package com; import com.B; class A { private B b; } 如果这能起作用,有没有塞纳里奥或类似的案例可能不起作用?(比如有一个构造函数在两个类中生成另一个类的对象,或者其他什么?) 谢谢你的帮助 它确实有效,如果你自己尝试一下,你就能看到。不过,通常最好避免循环引用,因为循环引用会使设计复杂化 如果不小心,很容易在代码中产生无限循环。例如,如果您在两侧调用另一个

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

行吗?我正在做的事情是这样的:

package com;
import com.B;

class A {

     private B b;

}
如果这能起作用,有没有塞纳里奥或类似的案例可能不起作用?(比如有一个构造函数在两个类中生成另一个类的对象,或者其他什么?)


谢谢你的帮助

它确实有效,如果你自己尝试一下,你就能看到。不过,通常最好避免循环引用,因为循环引用会使设计复杂化

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

我对您的示例进行了一些扩展,以证明您可以很好地编译和运行它

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 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";
    }
}