套件和導入
在 Kotlin 中,套件(Packages)和導入(Imports)用來組織分類和存取分類好的檔案。
套件
套件用於將檔案分類命名,不同套件的類別、函數等可以有相同的名稱,解決命名衝突問題。
- 定義套件:在 Kotlin 檔案的一開始(頂部)使用
package
關鍵字宣告該檔案中所有內容的套件名稱。 - 預設套件:如果一個檔案沒有宣告套件名稱,則該檔案中的類別、函數等屬於預設套件。
頂層宣告
與package
同一層宣告的類別、函數、屬性等,稱作頂層宣告(top-level declarations)。
完全修飾名
下面例子,宣告套件名稱是org.example
。printMessage()
的完整名稱是 org.example.printMessage
,而 Message
的完整名稱是 org.example.Message
。org.example.printMessage
和 org.example.Message
又稱為完全修飾名(Fully qualified name)。
package org.example
fun printMessage() { /*...*/ }
class Message { /*...*/ }
導入
導入讓你可以不需要使用完全修飾名,就能存取另一個套件下的類別、函數、屬性等。
如果沒有導入,要使用另一個套件下的類別、函數、屬性等,必須要使用完全修飾名。
使用 import
關鍵字導入所需的類別、函數等。
import org.example.Message // 名稱 Message 代表 org.example.printMessage
導入所有聲明
使用星號(*
)導入一個套件下的所有類別、函數、屬性等。
import org.example.* // 導入 org.example 套件下的所有名稱
// 名稱 Message 代表 org.example.Message
// 名稱 printMessage 代表 org.example.printMessage
導入並重命名
如果導入的兩個類別或函數名稱衝突,可以使用 as
關鍵字重命名其中一個。
import org.example.Message // 名稱 Message 代表 org.example.Message
import org.test.Message as TestMessage // 名稱 TestMessage 代表 org.test.Message
預設導入
每個 Kotlin 檔案都會預設導入這些套件:
kotlin.*
kotlin.annotation.*
kotlin.collections.*
kotlin.comparisons.*
kotlin.io.*
kotlin.ranges.*
kotlin.sequences.*
kotlin.text.*
根據目標平台,會額外導入一些套件:
- 對於 JVM:
java.lang.*
kotlin.jvm.*
- 對於 JS:
kotlin.js.*
範例
考慮你有一個用於數學運算的工具類別和一個用於日期操作的工具類別,分別位於不同的套件中:
// 檔案: MathUtils.kt
package com.example.math
fun add(a: Int, b: Int): Int = a + b
// 檔案: DateUtils.kt
package com.example.date
fun getCurrentDate(): String = "2024-03-14"
在另一個檔案中使用這些工具函數:
// 檔案: Example.kt
import com.example.math.add
import com.example.date.getCurrentDate
fun main() {
println("Sum: ${add(5, 3)}")
println("Date: ${getCurrentDate()}")
}