определение типа в объекте пакета "угон" наследования Java-класса в Scala-коде - PullRequest
1 голос
/ 26 мая 2011

У меня следующая ситуация:

У меня есть иерархия классов 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?

Редактировать: при повторной компиляции кода вне моей досягаемости и удалении повторного определения типа все работает. Поэтому я думаю, что мне нужно «отключить» определение типа уровня пакета для определенного класса.

1 Ответ

0 голосов
/ 26 мая 2011

Используете ли вы графический интерфейс (в частности, Eclipse) для создания своего проекта?

Это, похоже, связано с проблемами с Scala при доступе к Java-методам (на которые нет ответа, но общее мнение о том, что проблема не в Scala, а в Eclipse).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...