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

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

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

由于我无法在Module2.kt访问Module1A类,为什么A不是A自由使用的呢?

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

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

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

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

Interesting Posts