大三寒假學習 spark學習 Scala面向對程式設計 物件(apply方法與update方法)
阿新 • • 發佈:2022-01-15
Apply方法:
- Scala自動呼叫Array類的伴生物件Array中的一個稱為apply的方法,來建立一個Array物件myStrArr。
- apply方法呼叫約定:用括號傳遞給類例項或單例物件名一個或多個引數時,Scala 會在相應的類或物件中查詢方法名為apply且引數列表與傳入的引數一致的方法,並用傳入的引數來呼叫該apply方法。
下面為程式碼示例
class TestApplyclass { def apply(param: String): String ={ println("apply method called,parameter is:" +param)
"Hello wor1d !" } } val myobject= new TestApplyclass println(myobject( "param1"))
在單例物件中定義apply方法:
object TestApplysingleobject { def apply(param1:String,param2: String): String = { println( "apply method called") param1 +" and " + param2 } } val group =TestApplysingleobject("Zhangfei", "Liubei") println(group)
可以看出,在執行TestApplySingleObject("Zhangfei" , "Liubei")時呼叫了apply方法,並且把“Zhangfei and Liubei”作為返回值,賦值給group變數,因此,println(group)語句會打印出“Zhangfei and Liubei"
伴生類和伴生物件中的apply:
class TestApplyClassAndObject {} class ApplyTest{ def apply() = println("apply method in class is called! ") def greetingofclass: Unit={ println("Greeting method in class is called.") } } object ApplyTest{ def apply()={ println("apply method in object is called") new ApplyTest() } } object TestApplyClassAndObject{ def main (args: Array [String]){ val a= ApplyTest()//這裡會呼叫伴生物件中的apply方法 a.greetingofclass a()//這裡會詞用伴生類中的apply方法 } }
從上面程式碼可以看出,當我們執行val a = ApplyTest(0時,會導致apply方法的呼叫並返回該方法呼叫的值,也就是ApplyTest的例項化物件。當執行a()時,又會導致呼叫伴生類的apply方法,如果我們願意,就可以在伴生類的apply方法中寫入一些處理邏輯,這樣就可以把傳入的引數賦值給例項化物件的變數
update方法:
當對帶有括號幷包括一到若干引數的物件進行賦值時,編譯器將呼叫物件的update方法,在呼叫時,是把括號裡的引數和等號右邊的物件一起作為update方法的輸入引數來執行呼叫
從上面可以看出,在進行元組賦值的時候,之所以沒有采用Java中的方括號myStrArr[O]而是採用圓括號的形式,myStrArr(O),是因為存在上述的update方法的機制