1. 程式人生 > >scala apply方法 筆記

scala apply方法 筆記

Scala比Java更面向物件的一個方面是Scala沒有靜態成員。替代品是,Scala有單例物件:singleton object。

當單例物件與某個類共享同一個名稱時,他被稱作是這個類的伴生物件:companion object。你必須在同一個原始檔裡定義類和它的伴生物件。類被稱為是這個單例物件的伴生類:companion class。類和它的伴生物件可以互相訪問其私有成員。

定義單例物件不是定義型別(在Scala的抽象層次上說)

類和單例物件間的一個差別是,單例物件不帶引數,而類可以。因為你不能用new關鍵字例項化一個單例物件,你沒機會傳遞給它引數。每個單例物件都被作為由一個靜態變數指向的虛構類:synthetic class的一個例項來實現,因此它們與Java靜態類有著相同的初始化語法。Scala程式特別要指出的是,單例物件會在第一次被訪問的時候初始化。

Scala 的apply 有2 張形式,一種是 伴生物件的apply ,一種是 伴生類中的apply,下面展示這2中的apply的使用。

示例程式碼:

class ApplyOperation {
}
class ApplyTest{
    def apply() = println("I am into spark so much!!!")
    def haveATry: Unit ={
        println("have a try on apply")
    }
}
object ApplyTest{
     def apply() = {
          println("I  am into Scala so much"
) new ApplyTest } } object ApplyOperation{ def main (args: Array[String]) { val array= Array(1,2,3,4) val a = ApplyTest() //這裡就是使用object 的使用 a.haveATry a() // 這裡就是 class 中 apply使用 } }

執行結果

I am into Scala so much
have a try on apply
I am into spark so much!!!

object apply 是一種比較普遍用法。 主要用來解決複雜物件的初始化問題。同時也是單例