首页 > 解决方案 > 除非我在包中声明,否则类是不可见的

问题描述

我有AppComponentsAppLoader.scala堂课projectDir/app

我的测试在projectDir/test/ControllerSpec/UserControllerSpec.scala

UserControllerSpec.scala,我试图创建一个实例,AppComponents但编译器找不到AppComponents该类

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

但是如果我在其中包含语句package appApploader.scala那么编译器能够找到AppComponents并且上面的代码可以编译。

我不明白这种行为。

标签: scalaintellij-ideascalatestplayframework-2.6

解决方案


假设包装外的顶级定义被注入到一个特殊的空包中。该包无法命名,因此无法导入。但是,空包的成员彼此可见没有资格。

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

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

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

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


推荐阅读