我有以下情况:类型定义的Java类在Scala代码继承
我有一个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代码中访问层次结构?
编辑:当重新编译我的范围以外的代码并删除类型重定义时,一切正常。所以我认为我所看到的是一种“禁用”特定类的包级别类型定义的方法。
FooClass扩展FooTrait吗?你的代码示例当然不会这么说。 – 2011-05-25 21:08:05
您应该提供一个编译示例。你的问题并没有显示什么包'公共类模型扩展org.foo.some.GenericModel'定义在...对我来说,它似乎应该在* your *包中定义'org.bar'并且有'public class MyModel扩展org.bar.Model'。 – huynhjl 2011-05-26 07:02:26
谢谢,这个问题缺少了一些重要的观点:'org.foo.some.GenericModel'和'org.foo.some.Model'都不在我的范围之内,并且与'org.bar.MyModel'不同。 ; 'FooClass'扩展了'FooTrait [MyModel]'。 – 2011-05-26 07:24:35