Пакеты и импорты
Файл с исходным кодом может начинаться с объявления пакета.
package org.example
fun printMessage() { /*...*/ }
class Message { /*...*/ }
// ...
Всё содержимое файла с исходниками (например, классы и функции) располагается в объявленном пакете.
Таким образом, в приведённом выше примере полное имя функции printMessage()
будет org.example.printMessage
,
а полное имя класса Message
- org.example.Message
.
Если файл не содержит явного объявления пакета, то его содержимое находится в безымянном пакете по умолчанию.
Импорт по умолчанию
По умолчанию в каждый файл Kotlin импортируется несколько пакетов:
- kotlin.*
- kotlin.annotation.*
- kotlin.collections.*
- kotlin.comparisons.*
- kotlin.io.*
- kotlin.ranges.*
- kotlin.sequences.*
- kotlin.text.*
Дополнительные пакеты импортируются в зависимости от платформы:
JVM:
- java.lang.*
- kotlin.jvm.*
JS:
Импорт
Помимо импорта по умолчанию каждый файл может содержать свои собственные объявления импорта.
Вы можете импортировать одно имя:
import org.example.Message // теперь Message можно использовать без указания пакета
Можете импортировать всё доступное содержимое пространства имён (пакет, класс, объект и т.д.):
import org.example.* // всё в 'org.example' становится доступно без указания пакета
При совпадении имён мы можем разрешить коллизию используя ключевое слово as
для локального переименования совпадающей сущности.
import org.example.Message // Message доступен
import org.test.Message as testMessage // testMessage заменяет имя 'org.test.Message'
Ключевое слово import
можно использовать не только с классами, но и с другими объявлениями:
- функции и свойства верхнего уровня;
- функции и свойства, объявленные в объявлениях объектов;
- перечислениях.
Область видимости объявлений верхнего уровня
Если объявление верхнего уровня отмечено как private
, то оно является private в файле, в котором оно объявлено
(см. Модификаторы области видимости).