本文主要内容翻译自Kotlin references。
Kotlin源文件的第一行可以用package声明语句来指定该源文件所属的软件包:
package foo.bar
fun baz() {}
class Goo {}
在包含package
语句的源文件中,所有的内容(包括类、函数)都属于指定的包。在上述例子中,bar()
的全名为foo.bar.baz()
,而Goo
的全名为foo.bar.Goo
。
如果源文件没有指定的包,那么这个源文件中的所有内容将属于一个没有名称的”default”包。
默认导入
以下package将会在所有的Kotlin源文件中被默认导入:
- kotlin.*
- kotlin.annotation.*
- kotlin.collection.*
- kotlin.comparisions.* (Kotlin 1.1以上)
- kotlin.io.*
- kotlin.ranges.*
- kotlin.sequences.*
- kotlin.text.*
如果是在特定的平台下,还会有一些额外的默认包会被引入:
- JVM:
- java.lang.*
- kotlin.jvm.*
- JS:
- kotlin.js.*
用户自定义导入
除了默认导入的内容以外,用户可以在每一个源文件中使用import语法直接导入需要的package。
我们可以单独导入某个名称,例如:
import foo.Bar //导入Bar,在这之后,Bar可以直接使用(表示foo.bar)。
或者,我们也可导入一个包中的所有内容(子包、类、对象等等):
import foo.* //导入foo包中的所有名称都可以直接使用。
如果存在名称冲突,可以在import
语句中使用as
关键字来定义一个在文件作用域中有效的局部名称:
import foo.Bar // Bar可以直接使用
import foo.Bar as bBar // bBar是foo.Bar的别名
不同于Java,在Kotlin中import
还可以用来导入除了类以外的其他东西。以下声明可以使用import导入:
- Top-level 函数和属性;
- object declerations(用于单例模式)中声明的方法和属性;
- 枚举常量。
Kotlin中没有类似Java的 “import static”语法。
Top-level 声明的可见行
Top-level 声明是指,直接声明在源文件中与import
语句同级的声明语句,在Java中只有类才能是Top-level声明的,但是Kotlin允许变量和函数像类一样在Top-level声明。
如果一个Top-level声明是private
的,那么该声明只能在对应的源文件中使用。