8

Kotlin 中关于可见性修饰符的官方文档说,标记的包级元素private仅在声明它们的模块中可见。

因此,在中A声明的类在Module1.kt中不可见Module2.kt。但是,如果我尝试添加到Module2.kt它自己的类中A,我会收到Redeclaration: A错误消息。

既然我不能进入Module2.ktModule1班级A,为什么不能A免费使用这个名字?

4

1 回答 1

13

“模块是一起编译的一组 Kotlin 文件”(可见性修饰符 - Kotlin 编程语言)。

在您的示例中,Module1.kt并且Module2.kt是单独的源文件,尽管它们的名称它们不一定是单独模块的一部分:

  • 如果它们一起编译,则它们是同一模块的一部分。
  • 如果它们彼此分开编译,那么它们将成为不同模块的一部分,并且每个模块都可以定义自己的private class A.

请记住,可见性与身份不同。即使 aclass在其他地方不可见,也不意味着它不存在。加载具有相同完全限定名称的多个类声明可能(并且很可能会)在运行时导致问题。

于 2016-02-15T13:40:00.430 回答