无法在不同模块中创建具有相同名称的私有类

时间:2016-02-15 12:19:43

标签: kotlin name-collision

关于Kotlin中可见性修饰符的

Official docs表示标记为private的包级元素仅在声明它们的模块中可见。

因此A中声明的Module1.ktModule2.ktModule2.kt中无法显示。但是,如果我尝试添加到A它自己的类Redeclaration: A,我会收到Module2.kt错误。

由于我无法访问Module1A的{​​{1}}课程,为什么名称A无法免费使用使用?

1 个答案:

答案 0 :(得分:11)

“模块是一组编译在一起的Kotlin文件”(Visibility Modifiers - Kotlin Programming Language)。

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

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

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