如果類別使用套件加以管理,則套件名稱與類別名稱會結合為完全吻合名稱(Fully-qualified name),你在使用類別時,必須指定完全吻合名稱:
val date = new java.util.Date
println(date)
在程式中每次都使用類別的完全吻合名稱,不免顯得冗長,你可以使用import語句,先告知程式中會使用到的完全吻合名稱,之後使用類別時,就可以僅使用類別名稱,例如:
import java.util.Date
val date = new Date
println(date)
當編譯器遇到Date名稱時,由於你事先使用import告訴過它,會有java.util.Date這個名稱,所以編譯器嘗試使用java.util.Date來進行編譯。如果同一套件中,有多個類別會使用到,則可以如下使用:
import java.util._
val date = new Date
val calendar = Calendar.getInstance
println(date)
println(calendar.getTime)
在import時,套件名後接上_字元,表示要匯入該套件中所有類別,如此只要是該套件中的類別,都可以直接使用類別名稱。在使用import時,也可以匯入指定類別的所有成員,例如:
import scala.Math._
println(Pi) // 3.141592653589793
println(sqrt(9)) // 3
上面的例子中,你匯入scala.Math(object)中所有的成員,接下來就可以直接撰寫成員名稱。在使用import時,也可以指定匯入套件,例如:
import java.util
val date = new util.Date
println(date)
事實上,import可以出現在任何陳述句可以出現的位置,也可以指定對某個物係進行匯入,例如:
def now = {
import java.util.Calendar
val date = Calendar.getInstance
import date._
getTime // 也就是 date.getTime
}
println(now)
上面的例子中,import的作用僅限於now函式之中,你也可以在同一個import語句中指定多個要匯入的類別,例如:
import java.util.{Date, Calendar} // 僅匯入java.util.Date與java.util.Calendar
val date = new Date
val calendar = Calendar.getInstance
println(date)
println(calendar.getTime)
也可以為import的類別指定別名:
import java.util.{Date => D, Calendar => C}
val date = new D
val calendar = C.getInstance
println(date)
println(calendar.getTime)
下面這個程式,將Date指定別名為D,並import所有java.util下的其它類別:
import java.util.{Date => D, _}
val date = new D
val calendar = Calendar.getInstance
println(date)
println(calendar.getTime)
import java.util.(_)的話,作用與import java.util._。如果你指定類別別名時,使用_,表示該成員不匯入,例如:
import java.util.{Date => _, _}
val date = new java.util.Date
val calendar = Calendar.getInstance
println(date)
println(calendar.getTime)
上面的例子中,除了Date之外,java.util下的所有類別都會匯入。在Scala中,scala、scala.Predef與java.lang預設是有匯入的,也就是每個Scala程式,就像是自動寫下了以下的import:
import java.lang._
import scala._
import Predef._