包与导入
源文件通常以包声明开头:
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
)指令。
可以导入一个单个名称:
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
的,它是声明它的文件所私有的(参见 可见性修饰符)。