我可以编译两个相互需要的 类 吗?
Can I compile two classes that need each other?
我正在制作一个包,其中有两个 class 相互导入。
有用吗?我做的事情是这样的:
package com;
import com.B;
class A {
private B b;
}
package com;
import com.A;
class B {
private A a;
}
如果这行得通,是否有任何可能行不通的情况或类似的案例? (就像在 class 中有一个构造函数使另一个 class 成为对象,或者其他什么?)
感谢您的帮助!
确实有效,自己试一下就知道了。不过,通常最好避免循环引用,因为它们会使设计复杂化。
如果不小心,很容易在代码中造成无限循环。例如,如果你在两侧调用另一个 class 的构造函数,它会编译得很好,但会以 java.lang.WhosebugError 结尾;与直接或间接来回调用的任何(组合)相同。
我稍微扩展了您的示例以证明您可以编译并且 运行 它很好。
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";
}
}
我正在制作一个包,其中有两个 class 相互导入。
有用吗?我做的事情是这样的:
package com;
import com.B;
class A {
private B b;
}
package com;
import com.A;
class B {
private A a;
}
如果这行得通,是否有任何可能行不通的情况或类似的案例? (就像在 class 中有一个构造函数使另一个 class 成为对象,或者其他什么?)
感谢您的帮助!
确实有效,自己试一下就知道了。不过,通常最好避免循环引用,因为它们会使设计复杂化。
如果不小心,很容易在代码中造成无限循环。例如,如果你在两侧调用另一个 class 的构造函数,它会编译得很好,但会以 java.lang.WhosebugError 结尾;与直接或间接来回调用的任何(组合)相同。
我稍微扩展了您的示例以证明您可以编译并且 运行 它很好。
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";
}
}