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

net*_*men 7 kotlin name-collision

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

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

因为我不能访问Module2.ktModule1A类,为什么不是名字A随意使用?

mfu*_*n26 13

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

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

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

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

  • 看起来这使得“私有”有点无用,因为它实际上是“内部”。我在尝试创建文件范围的帮助程序类时遇到了这个问题。 (3认同)