單例(Singleton)對(duì)象是一個(gè)通過(guò)使用object關(guān)鍵字而不是使用class關(guān)鍵字聲明的對(duì)象。其它對(duì)象不需要調(diào)用在單例對(duì)象中聲明的方法。
在scala中,沒(méi)有靜態(tài)的概念。 所以scala創(chuàng)建一個(gè)單例對(duì)象來(lái)為程序的執(zhí)行提供入口點(diǎn)。
如果不創(chuàng)建單例對(duì)象,代碼也會(huì)成功編譯,但不會(huì)產(chǎn)生任何輸出。單例對(duì)象中聲明的方法可以全局訪問(wèn)。單例對(duì)象可以擴(kuò)展類和性狀。
Scala單例對(duì)象示例
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中,使用以下命令編譯并執(zhí)行代碼 -
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中,當(dāng)有一個(gè)與單例(singleton)對(duì)象同名的類時(shí),它被稱為伴生(companion)類,單例(singleton)對(duì)象調(diào)用伴生對(duì)象。
伴生類及其伴隨對(duì)象必須在同一個(gè)源文件中定義。
Scala伴生對(duì)象示例
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中,使用以下命令編譯并執(zhí)行代碼 -
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.