除非我在包中声明它,否则类不可见

时间:2018-06-07 11:19:54

标签: scala intellij-idea scalatest playframework-2.6

我在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 :(得分:1)

  

Top-level definitions outside a packaging are assumed to be injected into a special empty package. That package cannot be named and therefore cannot be imported. However, members of the empty package are visible to each other without qualification.

所以AppComponents只应对其他类/特征/等可见。在包裹外面。因为

  

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

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

此行为可能与Java保持一致,请参阅Import package with no name Java的答案。