У меня следующая ситуация:
У меня есть иерархия классов 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
вне моей досягаемости (не мой код). В Скала, также вне моей досягаемости, есть:
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
границы параметров [T <: org.foo.some.GenericModel] </p>
Кроме того, я не могу вызвать метод org.foo.some.Model
или org.foo.some.GenericModel
для javaModel
:
javaModel.doSomething()
поднимает
значение create не является членом org.bar.MyModel
У меня сложилось впечатление, что объект пакета "захватывает" видимость иерархии классов Java в коде Scala. Действительно, ScalaModel
не распространяется org.foo.some.GenericModel
.
Возможно, есть ли способ получить доступ к иерархии из кода Scala?
Редактировать: при повторной компиляции кода вне моей досягаемости и удалении повторного определения типа все работает. Поэтому я думаю, что мне нужно «отключить» определение типа уровня пакета для определенного класса.