scala apply方法 筆記
阿新 • • 發佈:2018-12-25
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 是一種比較普遍用法。 主要用來解決複雜物件的初始化問題。同時也是單例