您好,登錄后才能下訂單哦!
好程序員大數(shù)據(jù)學習路線分享scala單列和伴生對象
scala單例
object SingletonDemo {
??def main(args: Array[String]): Unit = {
????val s = SessionFactory
????println(s.getSession)
????println(s.getSession.size) ?//.size得到幾個session對象
??}
}
object SessionFactory{
??println("SessionFactory 被執(zhí)行了")
??
??//計數(shù)器
??var i = 5
??//存放session對象的數(shù)組
??val sessions = new ArrayBuffer[Session]()
??while(i>1){
????println("while被執(zhí)行了")
????sessions.append(new Session)
????i -= 1
??}
??//獲取session對象
??def getSession = sessions
}
class Session{
}
伴生對象
單例對象包括伴生對象,類與伴生對象之間可以互相訪問,即使被private修飾的私有字段和屬性
伴生對象首先是一個單例對象,單例對象用object定義
在scala中,單例對象分兩種
1.關聯(lián)并未自動關聯(lián)到特定類的單例對象,稱為獨立對象 ->Standalone Object
2.關聯(lián)到一個類的單例對象,該單例對象與該類是同一個類名,稱為伴生對象 ->Companion Object
class companionObject {
??var id = 0
??private val name = "zhaoxiaodan"
??def printContent() = {
????println(name+companionObject.Constant)
??}
}
object companionObject {
??private val Constant = " is my goddess"
??def main(args: Array[String]): Unit = {
????val co = new companionObject
????co.id = 8
????println(co.id)
????println(co.name)
????co.printContent() ?//zhaoxiaodan is my goddess
??}
}
apply和unapply(通常在類的伴生對象中定義apply方法)
apply方法通常被稱為注入方法,在類的伴生對象中做一個初始化操作
apply方法的參數(shù)列表不需要和主構造器列表統(tǒng)一
unapply方法通常為提取方法,使用unapply方法可以提取構造器中固定數(shù)量的對象和值
unapply方法會返回一個Option,如果Option里有值的話,內部會有一個some對象來封裝這些值
class ApplyDemo(val name: String, val age: Int, val faceValue: Int) {
}
object ApplyDemo {
??//注入方法
??def apply(name: String, age: Int): ApplyDemo = {
????new ApplyDemo(name,age,faceValue = 80) ?//初始化
??}
??//提取方法
??def unapply(applyDemo: ApplyDemo):Option[(String,Int,Int)]={
????if (applyDemo == null){
??????None
????}else{
??????Some(applyDemo.name,applyDemo.age,applyDemo.faceValue)
????}
??}
}
object ApplyTest{
??def main(args: Array[String]): Unit = {
????val applyDemo = ApplyDemo("趙曉丹",18)
????applyDemo match {
??????case ApplyDemo("趙曉丹",age,faceValue) =>println(s"name:趙曉丹,age:$age,fv:$faceValue")
??????case _=> println("is null")
????}
??}
}
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。