Я пытаюсь отключить Spring IoC для нескольких классов Java и загрузить их непосредственно в какой-либо код Scala. Естественно, я обнаружил, что существуют конфликты пространств имен между пакетами, такими как
com.a.x.SomeClass
и
com.a.y.x.SomeClass
Я пытался использовать преобразователи пространства имен импорта, такие как
import com.a.y.x.{ SomeClass => YYYSomeClass }
import com.a.x{ SomeClass => XXXSomeClass }
Это очищает импорт, но обращение к этим классам позже в классах показывает ошибку при наведении курсора в Typesafe ScalaIDE и после чистых компиляций.
Когда я компилирую из плагина gradle scala или через Typesafe ScalaIDE со scala 2.10.2 или 2.10.3, я получаю следующий тип бесполезных сообщений об ошибках:
class SomeClass in package x cannot be accessed in com.a.y.x
Проблема возникает, если я пытаюсь использовать класс из com.a.y.x, у которого нет конфликта пространства имен. Если я попробую некоторые из флагов scalac, я также смогу получить предупреждение, которое немного отличается (на этапе ввода):
class SomeClass in package x cannot be accessed in y.this.x
Я действительно хотел бы знать, есть ли способ расширить первую ссылку на пакет. У меня возникли проблемы с настройкой проекта Eclipse для отладки компилятора scalac, и я не нашел флаг scalac, добавляющий полезную информацию к ошибке.
Ошибка возникает, когда я пытаюсь выполнить ctx.getBean("someClass").asInstanceOf[XXXSomeClass]
или new XXXSomeClass
.
Ссылка this
из предупреждения заставляет меня думать, что происходит некоторая путаница с объектами. Я не думаю, что это проблема пути к классам в более крупном проекте, над которым я работаю, потому что удаление одного jar-файла лишает возможности разрешать импорт, однако я не могу воспроизвести его с помощью простых примеров классов в отдельном проекте.
Еще немного информации о классах Java — разные, конфликтующие пакеты Java находятся в отдельных jar-файлах, которые были скомпилированы версией Java версии 1.6. Это общедоступные классы верхнего уровня, хотя два из них являются синглтонами с частными конструкторами и соответствующими общедоступными статическими методами getInstance().
x.SomeClass
илиy.SomeClass
(но, скорее всего, только для одного). - person user2864740   schedule 06.02.2014package totally.unrelated
. Не могли бы вы уточнить, какие аннотации, по вашему мнению, мне следует попробовать? - person n0741337   schedule 06.02.2014x: com.a.x.SomeClass = new com.a.x.SomeClass
для всего в каждом из конфликтующих пакетов (а также удалил соответствующий импорт). Та же ошибка сохраняется. - person n0741337   schedule 06.02.2014