我正在尝试取消 Spring IoC 几个 Java 类并将它们直接加载到一些 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 标志,我也能够得到一个稍微不同的警告(在打字阶段):
class SomeClass in package x cannot be accessed in y.this.x
我真的很想知道是否有办法扩展第一个包参考。我在设置 Eclipse 项目来调试 scalac 编译器时遇到问题,而且我还没有找到向错误添加有用信息的 scalac 标志。
当我尝试ctx.getBean("someClass").asInstanceOf[XXXSomeClass]
或时发生错误new XXXSomeClass
。
警告中的this
引用让我认为正在发生一些对象混淆。我不认为这是我正在处理的较大项目中的类路径问题,因为删除一个 jar 会删除解析导入的能力,但是我无法在单独的项目中使用简单的示例类来重现它。
有关 java 类的更多信息 - 不同的、冲突的 java 包位于不同的 jar 中,这些 jar 由 1.6 版的 Java 编译。它们是顶级的公共类,尽管其中两个是具有私有构造函数和相应的公共静态 getInstance() 方法的单例。