好程序員大數(shù)據(jù)學(xué)習(xí)路線分享scala單列和伴生對(duì)象
創(chuàng)新互聯(lián)成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元白云做網(wǎng)站,已為上家服務(wù),為白云各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575scala單例
object SingletonDemo {
def main(args: Array[String]): Unit = {
val s = SessionFactory
println(s.getSession)
println(s.getSession.size) ?//.size得到幾個(gè)session對(duì)象
}
}
object SessionFactory{
println("SessionFactory 被執(zhí)行了")
//計(jì)數(shù)器
var i = 5
//存放session對(duì)象的數(shù)組
val sessions = new ArrayBuffer[Session]()
while(i>1){
println("while被執(zhí)行了")
sessions.append(new Session)
i -= 1
}
//獲取session對(duì)象
def getSession = sessions
}
class Session{
}
伴生對(duì)象
單例對(duì)象包括伴生對(duì)象,類與伴生對(duì)象之間可以互相訪問(wèn),即使被private修飾的私有字段和屬性
伴生對(duì)象首先是一個(gè)單例對(duì)象,單例對(duì)象用object定義
在scala中,單例對(duì)象分兩種
1.關(guān)聯(lián)并未自動(dòng)關(guān)聯(lián)到特定類的單例對(duì)象,稱為獨(dú)立對(duì)象 ->Standalone Object
2.關(guān)聯(lián)到一個(gè)類的單例對(duì)象,該單例對(duì)象與該類是同一個(gè)類名,稱為伴生對(duì)象 ->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(通常在類的伴生對(duì)象中定義apply方法)
apply方法通常被稱為注入方法,在類的伴生對(duì)象中做一個(gè)初始化操作
apply方法的參數(shù)列表不需要和主構(gòu)造器列表統(tǒng)一
unapply方法通常為提取方法,使用unapply方法可以提取構(gòu)造器中固定數(shù)量的對(duì)象和值
unapply方法會(huì)返回一個(gè)Option,如果Option里有值的話,內(nèi)部會(huì)有一個(gè)some對(duì)象來(lái)封裝這些值
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")
}
}
}
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。