Official docs on visibility modifiers in Kotlin say that package-level elements marked private
are be visible only in the module in which they are declared.
So class A
declared in Module1.kt
isn't visible in Module2.kt
. But if I try to add to Module2.kt
it's own class A
I get the Redeclaration: A
error.
Since I can't access in Module2.kt
to Module1
's A
class, why isn't the name A
free to use?
"A module is a set of Kotlin files compiled together" (Visibility Modifiers - Kotlin Programming Language).
In your example, Module1.kt
and Module2.kt
are separate source files and despite their names they are not necessarily part of separate modules:
private class A
.Keep in mind that visibility is different from identity. Even if a class
is not visible elsewhere it doesn't mean that it does not exist. Loading multiple class declarations with the same fully-qualified name can (and likely will) cause issues at run-time.