Scala單例和伴生對象

單例(Singleton)對象是一個通過使用object關鍵字而不是使用class關鍵字聲明的對象。其它對象不需要調用在單例對象中聲明的方法。

在scala中,沒有靜態的概念。 所以scala創建一個單例對象來爲程序的執行提供入口點。
如果不創建單例對象,代碼也會成功編譯,但不會產生任何輸出。單例對象中聲明的方法可以全局訪問。單例對象可以擴展類和性狀。

Scala單例對象示例

object Singleton{  
    def main(args:Array[String]){  
        SingletonObject.hello()         // No need to create object.  
    }  
}  


object SingletonObject{  
    def hello(){  
        println("Hello, This is Singleton Object")  
    }  
}

將上面代碼保存到源文件:Demo.scala中,使用以下命令編譯並執行代碼 -

D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo
Hello, This is Singleton Object

Scala伴生對象

在scala中,當有一個與單例(singleton)對象同名的類時,它被稱爲伴生(companion)類,單例(singleton)對象調用伴生對象。

伴生類及其伴隨對象必須在同一個源文件中定義。

Scala伴生對象示例

class ComapanionClass{  
    def hello(){  
        println("Hello, this is Companion Class.")  
    }  
}  
object Demo{  
    def main(args:Array[String]){  
        new ComapanionClass().hello()  
        println("And this is Companion Object.")  
    }  
}

將上面代碼保存到源文件:Demo.scala中,使用以下命令編譯並執行代碼 -

D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo
Hello, this is Companion Class.
And this is Companion Object.