私人可见性修饰符和子包

时间:2015-07-22 17:57:10

标签: kotlin

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

  

如果顶级声明标记为私有,则它是私有的   包装它在(see Visibility Modifiers)中声明。自包装   真的窝在Kotlin,即包foo.bar被认为是其成员   foo,如果某个包在包中是私有的,那么所有它都是可见的   子包。

     

请注意,默认情况下不会导入外部包的成员,即   在foo.bar包中的文件中,我们无法访问foo的成员   导入它们。   来自:Visibility and Package Nesting

因此,让我们考虑以下示例:

File1.kt

package foo

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

File2.kt

package foo.baz

import foo.bar

fun main(args: Array<String>) = bar()

根据我的理解,函数bar()应该在包foo.baz中可见,因此可以从main()调用。但是当我尝试编译上面的内容时,我收到以下错误消息:

错误:Kotlin:无法访问'bar':'foo'中的'私有'

这是一个错误还是语言的规范已更新且文档没有?我错过了什么吗?

提前致谢。

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:-1)

虽然可能是安德烈·布雷斯拉夫写的,规则已经改变,但即使版本为0.12.1218和0.12.200,你仍然可以使用你的代码。

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