kotlinname-collision

Can't create private classes with same name in different modules


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?


Solution

  • "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:

    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.