私人可视性修改器和子包

所以我最近开始尝试与Kotlin,我偶然发现:

如果顶级声明被标记为私有,则它在其声明的包中是私有的( 参见可见性修饰符 )。 由于包真的嵌套在Kotlin中,也就是说,包foo.bar被认为是foo的成员,如果某个包是私有的,那么它的所有子包都是可见的。

请注意,外包的成员默认情况下是不导入的,即,在包foo.bar中的文件中,我们无法访问foo的成员而不导入它们。 来自: 可见性和包装嵌套

那么让我们考虑下面的例子:

File1.kt

package foo private fun bar() = println("This is bar!!!") 

File2.kt

 package foo.baz import foo.bar fun main(args: Array) = bar() 

从我理解的function栏()应该是可见的包在foo.baz,从而可以从main()调用。 但是,当我尝试编译上述我得到以下错误信息:

错误:Kotlin:无法访问’bar’:’foo’中的’private’

这是一个错误或有语言的规格已经更新,文件没有? 我错过了什么吗?

提前致谢。

我们最近更改了可见性规则,以便软件包不再嵌套。 所以这不是编译器中的错误,而是文档中的错误

尽管安德烈·布雷斯拉夫(Andrey Breslav)写道,虽然规则已经改变,但即使在版本0.12.1218和0.12.200的情况下,您仍然可以使用您的代码。

由于规则已经改变,你不应该这样做,但如果你真的想这样做,只需要改变你的导入语句为: import foo.*而不是明确地导入栏。