Così ho recentemente iniziato a sperimentare con Kotlin ed io siamo capitati questo:modificatore di visibilità privata e sottopackage
If a top-level declaration is marked private, it is private to the package it’s declared in (see Visibility Modifiers). Since packages really nest in Kotlin, i.e. package foo.bar is considered a member of foo, if something is private in a package, it is visible to all its subpackages.
Note that members of outer packages are not imported by default, i.e. in a file in package foo.bar we can’t access members of foo without importing them. From: Visibility and Package Nesting
Quindi prendiamo in considerazione il seguente esempio:
File1.kt
package foo
private fun bar() = println("This is bar!!!")
e File2.kt
package foo.baz
import foo.bar
fun main(args: Array<String>) = bar()
Da quello che ho capito la funzione bar() dovrebbe essere visibile nel pacchetto foo.baz e quindi essere richiamabile da main(). Ma quando provo a compilare quanto sopra ottengo il seguente messaggio di errore:
Errore: Kotlin: non possono accedere a 'bar': si tratta di 'private' in 'foo'
È questo un bug o ha le specifiche della lingua sono state aggiornate e la documentazione no? Mi sto perdendo qualcosa?
Grazie in anticipo.
Grazie, ma ricordarsi di documentare tali modifiche. Quindi, come funzionano ora i modificatori di visibilità del pacchetto/livello superiore? – feugatos
I pacchetti non si annidano, cioè privato in un pacchetto non è visibile in un altro. –
Inoltre, 'private' sarà presto cambiato per essere visibile non in un pacchetto ma nel file è dichiarato –