Класс не виден, если я не объявил его в пакете - PullRequest
0 голосов
/ 07 июня 2018

У меня есть класс AppComponents в AppLoader.scala в projectDir/app

Мои тесты в projectDir/test/ControllerSpec/UserControllerSpec.scala

В UserControllerSpec.scala, я пытался создать экземпляр AppComponents но компилятор не может найти AppComponents класс

override def components: BuiltInComponents = new AppComponents(context) //doesn't compile

Но если я включу оператор package app в Apploader.scala, то компилятор сможет найти AppComponents, и приведенный выше код компилируется.

Я не понимаю этого поведения.

1 Ответ

0 голосов
/ 07 июня 2018

Предполагается, что определения верхнего уровня вне упаковки вводятся в специальную пустую упаковку.Этот пакет не может быть назван и поэтому не может быть импортирован.Однако члены пустого пакета видимы друг для друга без квалификации.

Так что AppComponents должны быть видны только другим классам / чертам / и т.д.вне пакета.Потому что

, если я включу приложение пакета операторов в Apploader.scala, то компилятор сможет найти AppComponents

, похоже, UserControllerSpec объявляет пакет и может 't видеть членов пустого пакета.

Такое поведение, вероятно, для согласованности с Java, см. ответы на Импорт пакета без имени Java .

...