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

4.1k Views Asked by At

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?

1

There are 1 best solutions below

1
On BEST ANSWER

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

  • If they are compiled together then they are part of the same module.
  • If they are compiled separately from one another then they will be part of different modules and each can define their own 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.