我有以下情况:
我有一个像这样的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] { //... }
不编译并引发以下错误:
类型参数[org.bar.MyModel]不符合特质FooTrait的类型 参数bounds [T&lt ;: org.foo.some.GenericModel]
此外,我无法在org.foo.some.Model
上调用org.foo.some.GenericModel
或javaModel
的任何方法:
javaModel.doSomething()
加注
value create不是org.bar.MyModel的成员
我的印象是包对象“劫持”Scala代码中Java类层次结构的可见性。实际上,ScalaModel
并未延伸org.foo.some.GenericModel
。
是否有可能仍然可以从Scala代码中访问层次结构?
编辑:当我重新编译代码并删除类型重新定义时,一切正常。所以我认为我所看到的是一种“禁用”特定类的包级别类型定义的方法。
答案 0 :(得分:0)
您是否使用GUI(特别是Eclipse)来构建项目?
这似乎与Scala trouble accessing Java methods有关(没有答案,但普遍的共识是问题不在于scala而在于Eclipse)。