3

Spring IoC のいくつかの Java クラスを un-un-Scala コードに直接ロードしようとしています。当然、次のようなパッケージ間に名前空間の競合があることがわかりました

com.a.x.SomeClass

com.a.y.x.SomeClass

次のようなインポート名前空間リゾルバーを使用してみました

import com.a.y.x.{ SomeClass => YYYSomeClass }
import com.a.x{ SomeClass => XXXSomeClass }

これによりインポートがクリーンアップされますが、クラスの後半でこれらのクラスを参照すると、Typesafe ScalaIDE でホバーとしてエラーが表示され、クリーン コンパイル後にエラーが表示されます。

gradle scala プラグインからコンパイルするか、scala 2.10.2 または 2.10.3 で Typesafe ScalaIDE を介してコンパイルすると、次のような役に立たないエラー メッセージが表示されます。

class SomeClass in package x cannot be accessed in com.a.y.x

名前空間の競合がない com.ayx のクラスを使用しようとすると、問題が発生します。いくつかの scalac フラグを試してみると、わずかに異なる警告を出力することもできました (typer 段階で):

class SomeClass in package x cannot be accessed in y.this.x

最初のパッケージ参照を展開する方法があるかどうか知りたいです。scalac コンパイラーをデバッグするための Eclipse プロジェクトのセットアップに問題があり、エラーに有用な情報を追加する scalac フラグが見つかりません。

ctx.getBean("someClass").asInstanceOf[XXXSomeClass]またはを実行しようとすると、エラーが発生しますnew XXXSomeClass

警告からのthis参照により、オブジェクトの混乱が起こっていると思います。1 つの jar を削除するとインポートを解決できなくなるため、私が取り組んでいる大規模なプロジェクトではクラスパスの問題ではないと思いますが、別のプロジェクトの単純なサンプル クラスでは再現できません。

Java クラスに関するもう少し詳しい情報 - 競合する異なる Java パッケージは、Java の 1.6 フレーバーによってコンパイルされた個別の jar にあります。これらは最上位のパブリック クラスですが、2 つはプライベート コンストラクターと対応する public static getInstance() メソッドを持つシングルトンです。

4

1 に答える 1