標籤:相同 比較 訪問 array 方法 print 傳遞 名稱 log
在akka源碼中有這樣一個Cluster類。
使用方法是這樣的:val cluster = Cluster(context.system);
作為scala菜鳥的我,並沒有找到Cluster(system..)這個有參的構造方法。於是開始接著學習scala。
Cluster是一個object單例對象。
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 是一種比較普遍用法。 主要用來解決複雜物件的初始化問題。同時也是單例。
(是不是就像java中的單例Factory 方法一樣)
(轉)scala apply方法 筆記