Так что я недавно начал экспериментировать с Котлин, и я наткнулся на это:частный модификатор видимости и подпакеты
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
Итак, давайте рассмотрим следующий пример:
File1.kt
package foo
private fun bar() = println("This is bar!!!")
и File2.kt
package foo.baz
import foo.bar
fun main(args: Array<String>) = bar()
Из того, что я понимаю, панель функций() должна быть видимой в пакете foo.baz и, следовательно, быть вызванной из main(). Но когда я пытаюсь скомпилировать выше, я получаю следующее сообщение об ошибке:
Ошибка: Котлин: Не удается получить доступ к «бар»: это «частный» в «Foo»
Является ли это ошибка или имеет спецификация языка была обновлена, а документации нет? Я что-то упускаю?
Заранее спасибо.
Спасибо, но, пожалуйста, запомните эти изменения. Итак, как теперь работают модификаторы видимости на уровне пакетов/верхнего уровня? – feugatos
Пакеты не гнездятся, то есть частные в одном пакете не отображаются в другом. –
Кроме того, 'private' скоро будет изменен, чтобы быть видимым не в пакете, но в объявленном файле –