不能在不同的模块中创建具有相同名称的私有类
Kotlin中的可见性修饰符官方文档说,标记为private
包级别元素仅在声明它们的模块中才可见。
因此Module1.kt
声明的类A
在Module2.kt
不可见。 但是,如果我尝试添加到Module2.kt
它是自己的类A
我得到Redeclaration: A
错误。
由于我无法在Module2.kt
访问Module1
的A
类,为什么A
不是A
自由使用的呢?
“一个模块是一组编译在一起的Kotlin文件”( 可见性修饰符 – Kotlin编程语言 )。
在你的例子中, Module1.kt
和Module2.kt
是独立的源文件,尽管它们的名字不一定是单独模块的一部分:
- 如果它们被编译在一起,那么它们是同一个模块的一部分。
- 如果它们彼此分开编译,那么它们将成为不同模块的一部分,并且可以定义它们自己的
private class A
请记住,可见性与身份不同。 即使一个class
在别处不可见,也并不意味着它不存在。 使用相同的完全限定名加载多个类声明可能(也可能会)在运行时导致问题。