我有以下情況:類型定義的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