溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

好程序員大數(shù)據(jù)學習路線分享scala單列和伴生對象

發(fā)布時間:2020-07-28 02:51:08 來源:網絡 閱讀:124 作者:wx5d42865f47214 欄目:大數(shù)據(jù)

好程序員大數(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")

????}

??}

}

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI