3

Javaで前方宣言を行うにはどうすればよいですか?

私には2つのクラスがあり、それぞれがもう一方のメソッドを呼び出す必要があり、どちらも異なる名前空間内にあります。例えば...

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 に答える