首页 文章

私有可见性修饰符和子包

提问于
浏览
5

所以我最近开始尝试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<String>) = bar()

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

Error: Kotlin: Cannot access 'bar': it is 'private' in 'foo'

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

提前致谢 .

2 回答

  • 6

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

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

  • -1

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

相关问题