3

如何在 Java 中进行前向声明?

我有两个类,每个类都需要在另一个类中调用一个方法,它们都位于不同的命名空间中。例如...

package one;

class A {
    public void foo() {
        B b = new B();
        b.bah();
    }
}

package two;

class B {
    public void bah() {
        A a = new A();
        a.foo();
    }
}

更新

在 Eclipse 中,当遇到此代码时,会抛出编译时错误“在构建路径中检测到循环......”。

4

4 回答 4

2

只需导入它们。在这些方面,Java 比 C++ 聪明得多。

于 2010-03-10T14:41:41.593 回答
1

在 Eclipse 中,当遇到此代码时,会抛出编译时错误“在构建路径中检测到循环......”。

我认为 Eclipse 抱怨是因为您在工作区中的不同 Eclipse 项目中的类之间存在循环依赖关系。Eclipse 希望能够以线性顺序构建项目。

如果将相互依赖的类放到同一个项目中,Eclipse 会很高兴。

于 2010-03-10T15:30:02.807 回答
0

好吧,你导入类:

package one;

import two.B;

class A {
    public void foo() {
        new B().bah();
    }
}

或使用他们的全名:

package one;

class A {
    public void foo() {
        new two.B().bah();
    }
}

但是,不用说,这将导致抛出异常(至少,在您发布的片段中......)。

于 2010-03-10T14:42:51.410 回答
0

鉴于这里的评论(即您不需要做显式的前向声明,因为编译器可以应付)我已将 Eclipse 错误降级为警告,并且必须忽略它。

为此,请访问...

窗口 > 首选项 > Java > 编译器 > 构建 > 构建路径问题 > 循环依赖

于 2010-03-10T14:51:41.170 回答