apply: 用括號傳遞變量(對象)1個或多個參數時,scala會把它轉化為對apply方法的調用
val array=Array(1,2,3,4,5,6)
array(0), 取數組的第1個元素的操作會轉換成 array.apply(0) 操作,這也能解釋為何 Scala 數組取值不用中括號括下標的方式,由于它也是1次方法調用。
anyobject("key1")會被轉換成 anyObject.apply("key") 操作,這也會讓我們想到 Map 的取值操作
class SomeClass {
def apply(key:String):String ={
println("apply method called, key is: " + key)
"Hello World!"
}
}
val anyObject =new SomeClass
println(anyObject("key1"))
履行后輸出結果是:
apply method called, key is: key1
Hello World!
說明是調用到了相應的 apply 方法的。
我們在構造 Array 或 Map 時,會簡單的寫成
val numNames =Array("zero","one","two")
上面的功效像是調用的 Array 類的 apply 工廠方法。一樣看個單例對象的例子,也解釋了伴生對象的 apply 方法的調用
object EMail {
def apply(user:String, domain:String):String ={
println("apply method called")
println(user + "@"+ domain)
}
}
val email =EMail("lyrebing","hotmail.com")
println(email)
伴生類與伴生對象中apply
class ApplyTest{
def apply()=println("I am into spark somuch!")
def haveATry{
println("Have a try on apply!")
}
}
object ApplyTest{
def apply()={
println("I am into scala somuch!")
new ApplyTest
}
}
object ApplyOperation{
def main(args:Array[String]){
val a=ApplyTest()
a.haveATry
//I am into scala somuch!
//Have a try on apply!
val b=new ApplyTest
b.haveATry
println(b()) //調用類的apply方法
//Have a try on apply!
//I am into spark somuch!
}
}