我有以下情况:
我有一个像这样的 Java 类层次结构:
package org.foo.some;
public class Model extends org.foo.some.GenericModel { // ... }
package org.bar;
public class MyModel extends org.foo.some.Model { // ... }
哪里org.foo.some.Model
和org.foo.some.GenericModel
超出了我的能力范围(不是我的代码)。在 Scala 中,也超出了我的能力范围,有:
package org {
package foo {
package object some {
type Model = org.foo.some.ScalaModel
}
}
}
这会导致 Scala 代码中出现有趣的行为,例如
val javaModel:MyModel = new org.bar.MyModel()
trait FooTrait[T <: org.foo.some.GenericModel] { // ... }
class FooClass extends FooTrait[MyModel] { //... }
无法编译并引发以下错误:
type arguments [org.bar.MyModel] do not conform to trait FooTrait's type parameter bounds [T <: org.foo.some.GenericModel]
此外,我无法调用 org.foo.some.Model
的任何方法也不属于org.foo.some.GenericModel
上javaModel
:
javaModel.doSomething()
加薪
value create is not a member of org.bar.MyModel
我的印象是,包对象“劫持”了 Scala 代码中 Java 类层次结构的可见性。确实,ScalaModel
不扩展org.foo.some.GenericModel
.
是否有办法仍然可以从 Scala 代码中访问层次结构?
编辑:当重新编译我无法触及的代码并删除类型重新定义时,一切正常。所以我认为我正在寻找一种“禁用”特定类的包级类型定义的方法。
最佳答案
您是否使用 GUI(特别是 Eclipse)来构建您的项目?
这似乎与 Scala trouble accessing Java methods 有关(没有答案,但普遍的共识是问题不在于 scala,而在于 Eclipse)。
关于java - 包对象中的类型定义 "hijacking"scala代码中java类的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6130811/