所以我最近开始尝试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'中的'私有'
这是一个错误还是语言的规范已更新且文档没有?我错过了什么吗?
提前致谢。
答案 0 :(得分:6)
我们最近更改了可见性规则,因此包不再嵌套。所以这不是编译器中的错误,而是在文档中
答案 1 :(得分:-1)
虽然可能是安德烈·布雷斯拉夫写的,规则已经改变,但即使版本为0.12.1218和0.12.200,你仍然可以使用你的代码。
由于规则已经更改,您不应该这样做,但如果您真的想这样做,只需将您的import语句更改为:
import foo.*
而不是明确导入栏。