0

継承したコードの一部で、プロジェクト内のクラスと同じ名前のクラスが同じパッケージに存在する依存関係 jar を持つプロジェクトがある場所で、興味深い動作が見られます。

Eclipse プロジェクト:

src/com.abc.dE

com.abc.dEclassが存在するXYZ.jarに依存します。

このセットアップがJavaで合法であるかどうかに興味があります。Eclipseによると、エラーとしてマークされず、ワークスペース内のそのような既存のクラスの名前を変更しようとする場合を除いて、依存関係jar内の既存のクラスをシャドウする新しいクラスを作成できます-その後、次の警告が生成されます:

「リファクタリングされた要素へのバイナリ参照が見つかりました。更新されないため、続行すると問題が発生する可能性があります。」

そして、このフォワード リファクタリングが許可されます。ただし、競合する名前に逆方向にリファクタリングしたい場合は、次のメッセージが Eclipse に表示されます。

「「E」という名前のタイプは、パッケージ「com.abc.d」に既に存在します

そうですか

  • 正しい Java
  • Eclipse の動作に許容される矛盾または
  • .Eclipse のバグですか?

ありがとうございました。

4

2 に答える 2

1

同じパッケージ/クラス名を持つ 2 つのクラスを持つことができないと述べているものは何もありません。

これは、クラスパスにライブラリの 2 つのバージョンが誤って存在する場合に常に発生し、IncompatibleClassChangeErrorクラスのロード順序に翻弄されているために間違ったバージョンを取得したり、取得したりすることがあります。

Eclipse、OTOH は、クラスパスで最初に検出されたクラスをロードするだけでなく、これらのクラスで何かを行う必要があります。意味がないため、既存のものに名前を変更することはできません。

既存のものの下に名前を変更することはエラーになる可能性がありますが、単に新しい/別のものを作成するのではなく、名前の問題を修正している可能性があるため、エラーであるとは限りません

于 2013-11-04T15:08:46.277 に答える