Kotlin 套件與引入 (Packages and Imports)
在寫程式時,我們通常會把相關的類別 (Class) 和函式 (Function) 放在同一個資料夾或檔案中整理。 在 Kotlin 中,這個整理的機制稱為 Package (套件)。
定義 Package
Package 的宣告必須放在檔案的最上方 (甚至在 import 之前)。 這代表這個檔案中的所有內容 (類別、函式、變數) 都屬於這個 Package。
package com.example.myapp
fun hello() {
println("Hello from com.example.myapp")
}
class User
目錄結構:
在 Java 中,Package 名稱必須嚴格對應資料夾結構 (例如
com.example 必須放在 com/example 資料夾)。
但在 Kotlin 中,這 不是強制的。你可以把 package com.example 放在任何資料夾中。
不過為了專案整潔,強烈建議還是維持資料夾結構與 Package 一致。匯入 (Imports)
如果你要使用其他 Package 的類別或函式,必須使用 import 關鍵字將其匯入。
import android.widget.TextView // 匯入特定類別
import android.view.* // 匯入該 Package 下的所有內容 (不推薦,建議明確匯入)
匯入 Top-level 函式與屬性
Kotlin 允許函式不一定要寫在 Class 裡面 (Top-level)。這些函式也可以直接被 import。
// Utils.kt
package com.demo
fun add(a: Int, b: Int) = a + b
// Main.kt
import com.demo.add
fun main() {
println(add(1, 2)) // 直接呼叫 add,不用 Utils.add
}
預設匯入 (Default Imports)
Kotlin 為了方便,預設會自動幫你匯入一些常用的 Package,你 不需要手動 import 它們:
kotlin.*(包含 Any, Int, String, List 等基本型別)kotlin.annotation.*kotlin.collections.*(包含 listOf, mapOf 等)kotlin.comparisons.*kotlin.io.*(包含 println, print 等)kotlin.ranges.*kotlin.sequences.*kotlin.text.*
以及 JVM 平台特定的:
java.lang.*kotlin.jvm.*
匯入別名 (Import Aliases)
如果你的程式中剛好要用到兩個不同 Package 但 名稱相同 的類別 (例如 java.util.Date 和 java.sql.Date),該怎麼辦?
Kotlin 提供了一個很棒的功能:as (別名)。
import java.util.Date
import java.sql.Date as SqlDate // 幫它取個新名字
fun transform(date: Date): SqlDate {
// ...
}
這樣程式碼就清楚多了,不用在程式碼中寫落落長的完整 Package路徑 (java.sql.Date)。