Scala 类是不可见的,除非我在包中声明它

Scala 类是不可见的,除非我在包中声明它,scala,intellij-idea,scalatest,playframework-2.6,Scala,Intellij Idea,Scalatest,Playframework 2.6,我在AppLoader.scalaprojectDir/app中有一个类AppComponents 我的测试位于projectDir/test/ControllerSpec/UserControllerSpec.scala 在UserControllerSpec.scala中,我试图创建AppComponents的实例,但编译器找不到AppComponents类 override def components: BuiltInComponents = new AppComponents(cont

我在
AppLoader.scala
projectDir/app
中有一个类
AppComponents

我的测试位于
projectDir/test/ControllerSpec/UserControllerSpec.scala

UserControllerSpec.scala
中,我试图创建
AppComponents
的实例,但编译器找不到
AppComponents

override def components: BuiltInComponents = new AppComponents(context) //doesn't compile
但是如果我在
Apploader.scala
中包含语句
package-app
,那么编译器就能够找到
AppComponents
,并编译上面的代码

我不理解这种行为

因此,
AppComponents
应该只对包外的其他类/特征等可见。因为

如果我在Apploader.scala中包含语句包app,那么编译器就能够找到AppComponents

看起来
UserControllerSpec
确实声明了一个包,但看不到空包的成员


这种行为可能是为了与Java保持一致,请参见的答案。

Alexey,你这个天才!对UserControllerSpec在一个包中!我要补充一点,我认为在Scala文件中没有不使用包声明的好理由。在Java中,你可能想简化目录结构,但在Scala中,你可以两者兼有。如果我在包中声明我的
Apploader
类,那么显然我必须使用
packagename.classname
访问它。我后来意识到了这一点。我不得不将
application.conf
中的条目更改为
play.application.loader=“app.AppLoader”