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

10

Kotlin中的可见性修饰符官方文档指出,被标记为private的包级元素只能在其所在的模块中可见。

因此,如果类AModule1.kt中声明,则在Module2.kt中不可见。但是,如果我尝试添加属于Module2.ktA类,就会得到Redeclaration: A错误。

既然我无法在Module2.kt中访问Module1中的A类,那么为什么名称A不能自由使用呢?


1
你可能对模块的概念感到困惑,请查看这个问题,确保你的 Module1.ktModule2.kt 实际上位于不同的模块中。我已经尝试了多个模块,没有出现重新声明错误。 - hotkey
1个回答

15

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

在你的例子中,Module1.ktModule2.kt 是分别独立的源文件,尽管它们的名称可能并不一定属于不同的模块:

  • 如果它们被一起编译,则它们就属于同一个模块。
  • 如果它们被单独编译,则它们将成为不同模块的一部分,并且每个模块都可以定义自己的private class A

请注意,可见性与标识不同。即使某个class在其他地方不可见,也并不意味着它不存在。在运行时加载多个具有相同完全限定名称的类声明可能会导致问题。


3
似乎这使得“private”变得无用,因为它实际上是“internal”。当我尝试创建一个文件范围的帮助类时,我遇到了这个问题。 - frodo2975

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接