无法在不同模块中创建具有相同名称的私有 类
Can't create private classes with same name in different modules
Official docs 关于 Kotlin 中的可见性修饰符表示标记为 private
的包级元素仅在声明它们的模块中可见。
所以在 Module1.kt
中声明的 class A
在 Module2.kt
中不可见。但是如果我尝试添加到 Module2.kt
它自己的 class A
我会得到 Redeclaration: A
错误。
既然我无法在Module2.kt
中访问到Module1
的A
class,为什么A
这个名字不能免费使用?
"A module is a set of Kotlin files compiled together" (Visibility Modifiers - Kotlin Programming Language).
在您的示例中,Module1.kt
和 Module2.kt
是单独的源文件,尽管它们的名称不同,但它们不一定是单独模块的一部分:
- 如果它们一起编译,那么它们就是同一模块的一部分。
- 如果它们彼此分开编译,那么它们将成为不同模块的一部分,每个模块都可以定义自己的
private class A
。
请记住,可见性不同于身份。即使 class
在其他地方不可见,也不意味着它不存在。加载具有相同完全限定名称的多个 class 声明可能(并且很可能会)在 运行 时导致问题。
Official docs 关于 Kotlin 中的可见性修饰符表示标记为 private
的包级元素仅在声明它们的模块中可见。
所以在 Module1.kt
中声明的 class A
在 Module2.kt
中不可见。但是如果我尝试添加到 Module2.kt
它自己的 class A
我会得到 Redeclaration: A
错误。
既然我无法在Module2.kt
中访问到Module1
的A
class,为什么A
这个名字不能免费使用?
"A module is a set of Kotlin files compiled together" (Visibility Modifiers - Kotlin Programming Language).
在您的示例中,Module1.kt
和 Module2.kt
是单独的源文件,尽管它们的名称不同,但它们不一定是单独模块的一部分:
- 如果它们一起编译,那么它们就是同一模块的一部分。
- 如果它们彼此分开编译,那么它们将成为不同模块的一部分,每个模块都可以定义自己的
private class A
。
请记住,可见性不同于身份。即使 class
在其他地方不可见,也不意味着它不存在。加载具有相同完全限定名称的多个 class 声明可能(并且很可能会)在 运行 时导致问题。