2017-10-22 22 views
0

は、ここでは、2つのJava Scalaのファイルです:クラスB1で重複ケースクラス名は

--A1.scala-- 

case class Result(a: String) 

class A1 { 
    ... 
} 


--B1.scala-- 

case class Result(a: String, b: String) 

class B1 { 
    ... 
} 

Resultケースクラスが適用されるが、実際には、それはA1にResultケースクラスを使用します.scalaはデフォルト(奇妙なもの)です。これが起こっている何らかの理由がありますか、どうすればこの問題を解決できますか?

+0

これが同じパッケージであることを再度確認してください。両方のクラスのパッケージ名を共有する – Pavel

+0

@Pavelこれらは同じパッケージ名 'com.XXX.jobs'にあります – KAs

答えて

2

大文字と小文字は区別されません。一つのパッケージに同じ名前のクラスを2つ持つことはできません。厳密に言えば、は、標準のJavaクラスローダーを使用しないことにより、です。 OSGiバンドルallow you to have same class name in two different bundlesが、これはおそらく過度の可能性があります。

(同じサブプロジェクト内で)一緒にコンパイルされていると、コンパイルエラーが発生するはずなので、そうではないようです。この場合、開発中に動作するように見えても、実行時にクラスのうちの1つだけが選択されます。

どのように私は彼らのために同じ名前を使用しないでください

このケースを解決することができます。またはあなたのクラスのコンパニオンオブジェクトにそれらを置く:

-- A1.scala 
class A1 { ... } 

object A1 { 
    case class Result(a: String) 
} 

-- B1.scala 
class B1 { ... } 

object B1 { 
    case class Result(a: String, b: String) 
} 

をあなたはA1.ResultB1.Resultとしてそれらを参照してください。この場合。