ZetCode

Kotlin import 关键字

最后修改于 2025 年 4 月 19 日

Kotlin 的 import 系统允许您从其他包访问声明。import 关键字对于组织和重用代码至关重要。本教程将通过示例深入探讨 import 关键字。

基本定义

Kotlin 中的 import 关键字用于将声明引入作用域。它可以导入包、类、函数、属性和类型别名。导入有助于避免完全限定的名称,并使代码更具可读性。

基本包导入

最简单的导入形式是将包中的所有声明引入作用域。当您需要从同一包中获取多个项目时,这很有用。

BasicImport.kt
package com.zetcode

import kotlin.math.*

fun main() {

    val sqrt = sqrt(16.0) // 4.0
    val abs = abs(-5) // 5
    
    println("Square root: $sqrt")
    println("Absolute value: $abs")
}

在这里,我们使用通配符 *kotlin.math 包中导入所有声明。这允许我们使用 sqrtabs 函数而无需包限定。通配符导入所有公共成员。

单个声明导入

您可以导入特定的声明,而不是整个包。当您只需要从包中获取几个项目时,建议这样做。

SingleImport.kt
package com.zetcode

import kotlin.math.PI
import kotlin.math.cos

fun main() {

    val cosine = cos(PI) // -1.0
    println("Cosine of PI: $cosine")
}

此示例仅从 math 包中导入 PIcos。显式导入使依赖关系清晰,并避免命名空间污染。它们也有助于在 IDE 中进行代码导航。

使用别名导入

Kotlin 允许使用 as 关键字重命名导入。当处理名称冲突或长类名时,这很有用。

AliasImport.kt
package com.zetcode

import java.util.Date as UtilDate
import kotlin.js.Date as JsDate

fun main() {

    val utilDate = UtilDate()
    val jsDate = JsDate()
    
    println("Java Date: $utilDate")
    println("JS Date: $jsDate")
}

在这里,我们从不同的包中导入两个不同的 Date 类。我们使用别名来区分它们。当使用类似的类时,别名有助于避免命名冲突并使代码更具可读性。

导入扩展函数

Kotlin 允许专门导入扩展函数。当您只需要从包中获取某些扩展时,这很有用。

ExtensionImport.kt
package com.zetcode

import kotlin.text.isNullOrEmpty

fun main() {

    val s: String? = null
    println("Is null or empty: ${s.isNullOrEmpty()}") // true
}

此示例导入可空字符串的 isNullOrEmpty 扩展函数。扩展函数导入的工作方式类似于常规函数导入。它们允许您使用扩展而无需限定其包。

导入伴生对象成员

Kotlin 允许直接导入伴生对象的成员。这提供了对常量和工厂方法的便捷访问。

CompanionImport.kt
package com.zetcode

import kotlin.math.PI
import kotlin.math.E
import kotlin.math.cos

fun main() {

    println("PI: $PI") // 3.141592653589793
    println("E: $E") // 2.718281828459045
    println("cos(PI): ${cos(PI)}") // -1.0
}

在这里,我们从 kotlin.math 导入常量 PIE。它们实际上是伴生对象成员。导入它们允许直接使用,而无需类限定,类似于 Java 中的静态导入。

从同一包中导入

来自同一包的声明不需要显式导入。Kotlin 会自动在同一包的所有文件中提供它们。

SamePackage.kt
package com.zetcode.utils

fun greet() = println("Hello from utils!")

// In another file in same package:
package com.zetcode.utils

fun main() {
    greet() // No import needed
}

greet 函数无需导入即可使用,因为这两个文件都在同一包中。Kotlin 的包系统的工作方式与 Java 类似,其中同一包成员会自动可见。

导入局部函数

Kotlin 不支持直接导入局部函数。但是,您可以将相关函数组织在对象或顶级声明中进行导入。

FunctionImport.kt
package com.zetcode.utils

object StringUtils {
    fun capitalize(s: String) = s.replaceFirstChar { it.uppercase() }
}

// In another file:
package com.zetcode

import com.zetcode.utils.StringUtils.capitalize

fun main() {
    println(capitalize("kotlin")) // Kotlin
}

在这里,我们将 capitalize 函数组织在一个对象中,然后专门导入它。这种模式对于需要在多个文件之间共享的实用函数很常见。

导入的最佳实践

来源

Kotlin 包文档

本教程深入介绍了 Kotlin 的 import 关键字,展示了各种导入技术。我们探讨了包导入、单个声明、别名和特殊情况(如扩展)。正确使用导入使代码更有条理且更易于维护。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有多年的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我撰写了 1400 多篇文章和 8 本电子书。我拥有超过八年的编程教学经验。

列出 所有 Kotlin 教程