Java:名称空间中类的转发声明

时间:2010-03-10 14:39:12

标签: java forward-declaration

如何在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 个答案:

答案 0 :(得分:3)

只需导入它们。对于这些事情,Java比C ++更聪明。

答案 1 :(得分:1)

  

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

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

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

答案 2 :(得分: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();
    }
}

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

答案 3 :(得分:0)

鉴于此处的注释(即您不需要像编译器可以应对的那样执行显式的前向声明),我已将Eclipse错误降级为警告,并且必须忽略它。

要做到这一点,请转到......

窗口>偏好> Java>编译器>建筑>构建路径问题>循环依赖