Kotlin Can';t在不同的模块中创建同名的私有类

Kotlin Can';t在不同的模块中创建同名的私有类,kotlin,name-collision,Kotlin,Name Collision,Kotlin中的可见性修饰符表示,标记为private的包级元素仅在声明它们的模块中可见 因此,在Module1.kt中声明的类A在Module2.kt中不可见。但是如果我试图添加到Module2.kt它自己的类A中,我会得到重新声明:A错误 既然我不能在Module2.kt中访问Module1的A类,为什么A这个名称不能免费使用?“模块是一组编译在一起的Kotlin文件”() 在您的示例中,Module1.kt和Module2.kt是独立的源文件,尽管它们的名称不同,但它们不一定是独立模块的一

Kotlin中的可见性修饰符表示,标记为
private
的包级元素仅在声明它们的模块中可见

因此,在
Module1.kt
中声明的类
A
Module2.kt
中不可见。但是如果我试图添加到
Module2.kt
它自己的类
A
中,我会得到
重新声明:A
错误

既然我不能在
Module2.kt
中访问
Module1
A
类,为什么
A
这个名称不能免费使用?

“模块是一组编译在一起的Kotlin文件”()

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

  • 如果它们一起编译,则它们是同一模块的一部分
  • 如果它们彼此独立编译,那么它们将是不同模块的一部分,每个模块都可以定义自己的
    私有类A

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

您可能会对模块的定义感到困惑,请检查您的
Module1.kt
Module2.kt
是否实际位于不同的模块中。我尝试了多个模块,没有出现重新声明错误。