5.1.3 包与导入
2 分钟阅读
5.1.3 包与导入
在 Kotlin 项目中,代码通过包和导入来组织:
- 包是一个或多个 Kotlin 文件的容器。文件通过
package头部与包关联。 - 导入是一条指令,它让其他包中的实体在当前文件中可用。
包头部
源文件可以以包头部开头:
| |
源文件的所有内容(例如类和函数)都属于这个包。它们的完全限定名由包名与实体名称拼接而成。在这个示例中:
printMessage()的完全限定名是org.example.printMessage。Message的完全限定名是org.example.Message。
如果文件没有包头部,它的内容属于根包。
导入
要使用其他包中文件里的实体,请使用 import 指令。除了默认导入之外,每个文件都可以声明自己的导入。
导入单个实体
导入特定实体,这样就可以不加限定地使用它:
| |
导入某个作用域的内容
星号导入以星号 * 结尾,会导入相应作用域中的所有具名实体:
| |
如果你同时用星号导入和显式导入导入了同一个实体,在重载解析时显式导入优先。
用别名解决名称冲突
如果两个被导入的实体同名,请用 as 关键字在本地重命名其中一个:
| |
可以导入哪些内容
import 关键字并不局限于类。无论来自包、类、对象还是枚举,你都可以导入以下实体:
- 直接声明在包中的顶层函数和属性:
| |
- 来自对象声明的函数和属性:
| |
- 伴生对象的成员,通过外层类名引用:
| |
- 枚举常量:
| |
- 嵌套类:
| |
默认导入
Kotlin 默认包含以下导入:
- kotlin.*
- kotlin.annotation.*
- kotlin.collections.*
- kotlin.comparisons.*
- kotlin.io.*
- kotlin.ranges.*
- kotlin.sequences.*
- kotlin.text.*
- kotlin.math.*
Kotlin 还会根据目标平台导入额外的包:
可见性与导入
能否导入某个实体取决于它的可见性修饰符:
public实体可以在任何位置导入。internal实体只能在同一模块内导入。protected实体不能被导入。- 顶层的
private实体只能在声明它的文件内访问。 - 其他
private实体不能被导入。