中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

好程序員大數據學習路線分享Scala系列之對象

發布時間:2020-06-22 00:57:46 來源:網絡 閱讀:168 作者:wx5d42865f47214 欄目:大數據

好程序員大數據學習路線為大家分享Scala系列之對象

1.?單例對象

Scala中沒有靜態方法和靜態字段,但是可以使用object這個語法結構來達到同樣的目的

1.scala類似于Java中的工具類,可以用來存放工具函數和常量

2.高效共享單個不可變的實例

3.單例模式

單例對象雖然類似于Java中的工具類,但它不是,還是一個對象,可以把單例對象名看做一個貼在對象上的標簽。

package?logging
//使用關鍵字object定義單例對象

object?Logger?{
??def?info(message:?String):?Unit?=?println(s"INFO:?$message")
}

單例對象的使用

//導入單例對象信息,使之在當前類可見

import?logging.Logger.info

class?Project(name:?String,?daysToComplete:?Int)

class?Test?{
??val?project1?=?new?Project("TPS?Reports",?1)
??val?project2?=?new?Project("Website?redesign",?5)
????//調用單例對象中定義的方法
??info("Created?projects")??//?Prints?"INFO:?Created?projects"
}

類和單例對象的區別是,單例對象不能帶參數,單例對象不能用new關鍵字實例化,所以沒有機會傳遞給它實例化的參數。

單例對象在第一次訪問的時候才會初始化。

當單例對象與某個類同名時,它被稱為類的伴生對象,類和伴生對象必須定義在一個源文件里,類稱為該單例對象的伴生類,類和他的伴生對象可以互相訪問其私有成員。

不與伴生類共享名稱的單例對象被稱為獨立對象,可以作為相關功能的工具類,或者scala應用程序的入口點。

2.?伴生對象

Scala的類中,與類名相同并且用object修飾的對象叫做伴生對象,類和伴生對象之間可以相互訪問私有的方法和屬性,他們必須存在同一個源文件中

class?AccountInfo?{
//類的伴生對象的功能特性并不在類的作用域
//所以不能直接用newUniqueNumber()調用伴生對象的方法
var?id?=?AccountInfo.newUniqueNumber()
}

object??AccountInfo?{
??private?var?lastNumber?=?0
??private?def?newUniqueNumber()?=?{
????lastNumber?+=?1;?lastNumber
??}

??def?main(args:?Array[String])?{
??//相當于Java中的靜態方法調用
????println(AccountInfo.newUniqueNumber())
??}

}
3. apply方法

通常我們會在類的伴生對象中定義apply方法,當遇到類名(參數1,...參數n)時apply方法會被調用

class?AccountInfo?{

}

object??AccountInfo?{
??private?var?lastNumber?=?0
??private?def?apply(arg?:Int)?=?{
????lastNumber?=?arg*2?+?1;?lastNumber
??}

??def?main(args:?Array[String])?{
????println(AccountInfo(1))
??}

}
4.?應用程序對象
Scala程序都必須從一個對象的main方法開始,可以通過擴展App特質,不寫main方法。

object?Hello?extends??App{
??println("Hello?World")
}

同

object?Hello?{

??def?main(args:?Array[String]):?Unit?=?{
????println("Hello?World")
??}

}
5.提取器

帶有unapply方法的對象,經常用在模式匹配或者偏函數中。

import?scala.util.Random

object?CustomerID?{

??def?apply(name:?String)?=?s"$name--${Random.nextLong}"

??def?unapply(customerID:?String):?Option[String]?=?{
????val?name?=?customerID.split("--").head
????if?(name.nonEmpty)?Some(name)?else?None
??}
}
//調用apply方法創建一個對象,等價于CustomerID.apply("Sukyoung")
val?customer1ID?=?CustomerID("Sukyoung")??//?Sukyoung--23098234908
customer1ID?match?{
????//調用unapply方法,提取name信息
??case?CustomerID(name)?=>?println(name)??//?prints?Sukyoung
??case?_?=>?println("Could?not?extract?a?CustomerID")
}


向AI問一下細節

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

AI

梁山县| 新干县| 个旧市| 剑阁县| 钟山县| 东乌珠穆沁旗| 唐海县| 开平市| 肃宁县| 河源市| 旺苍县| 永昌县| 驻马店市| 白朗县| 武威市| 苗栗县| 康乐县| 田东县| 麻城市| 广德县| 公主岭市| 高淳县| 嫩江县| 南郑县| 德格县| 桦甸市| 天柱县| 清苑县| 栾川县| 巴塘县| 祁门县| 深圳市| 额济纳旗| 赣州市| 咸阳市| 盐山县| 滁州市| 菏泽市| 英德市| 南宁市| 广汉市|