好程式設計師大資料學習路線分享scala單列和伴生物件
好程式設計師大資料學習路線分享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 被執行了")
//計數器
var i = 5
//存放session物件的陣列
val sessions = new ArrayBuffer[Session]()
while(i>1){
println("while被執行了")
sessions.append(new Session)
i -= 1
}
//獲取session物件
def getSession = sessions
}
class Session{
}
伴生物件
單例物件包括伴生物件,類與伴生物件之間可以互相訪問,即使被private修飾的私有欄位和屬性
伴生物件首先是一個單例物件,單例物件用object定義
在scala中,單例物件分兩種
1.關聯並未自動關聯到特定類的單例物件,稱為獨立物件 -> Standalone Object
2.關聯到一個類的單例物件,該單例物件與該類是同一個類名,稱為伴生物件 -> 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方法的引數列表不需要和主構造器列表統一
unapply方法通常為提取方法,使用unapply方法可以提取構造器中固定數量的物件和值
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")
}
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2654457/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師大資料學習路線分享Scala系列之物件程式設計師大資料物件
- 好程式設計師大資料學習路線分享Scala系列之陣列程式設計師大資料陣列
- 好程式設計師大資料學習路線分享spark之Scala程式設計師大資料Spark
- 好程式設計師大資料學習路線分享Scala分支和迴圈程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之抽象類程式設計師大資料抽象
- 好程式設計師大資料學習路線分享Scala系列之泛型程式設計師大資料泛型
- 好程式設計師大資料學習路線分享Scala系列之對映Map程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之基礎篇程式設計師大資料
- 好程式設計師大資料學習路線分享MAPREDUCE程式設計師大資料
- 好程式設計師大資料學習路線分享SparkSQl程式設計師大資料SparkSQL
- 好程式設計師大資料學習路線分享Scala系列之集合操作函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享Hbase指令學習程式設計師大資料
- 好程式設計師大資料學習路線分享大資料之字串程式設計師大資料字串
- 好程式設計師大資料學習路線分享TCP和UDP學習筆記程式設計師大資料TCPUDP筆記
- 好程式設計師大資料學習路線Hadoop學習乾貨分享程式設計師大資料Hadoop
- 好程式設計師大資料學習路線分享HDFS學習總結程式設計師大資料
- 好程式設計師大資料學習路線分享hdfs學習乾貨程式設計師大資料
- 好程式設計師大資料學習路線分享Actor學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線分享Map學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線分享HDFS讀流程程式設計師大資料
- 好程式設計師大資料學習路線分享AWK詳解程式設計師大資料
- 好程式設計師大資料學習路線分享UDF函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享Lambda表示式程式設計師大資料
- 好程式設計師大資料學習路線分享hive分割槽和分桶程式設計師大資料Hive
- 好程式設計師大資料學習路線分享大資料之執行緒程式設計師大資料執行緒
- 好程式設計師大資料學習路線分享高階函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享Hadoop機架感知程式設計師大資料Hadoop
- 好程式設計師Python學習路線分享Linux和資料庫部分程式設計師PythonLinux資料庫
- 好程式設計師大資料學習路線分享大資料之基礎語法程式設計師大資料
- 好程式設計師大資料學習路線分享MapReduce全過程解析程式設計師大資料
- 好程式設計師大資料學習路線分享hive的執行方式程式設計師大資料Hive
- 好程式設計師大資料學習路線分享什麼是Hash表程式設計師大資料
- 好程式設計師大資料學習路線分享MapReduce全流程總結程式設計師大資料
- 好程式設計師大資料學習路線之大資料自學路線二程式設計師大資料
- 好程式設計師大資料學習路線之大資料自學路線一程式設計師大資料
- 好程式設計師大資料學習路線分享執行緒學習筆記二程式設計師大資料執行緒筆記
- 好程式設計師大資料學習路線分享多執行緒學習筆記程式設計師大資料執行緒筆記
- 好程式設計師Java學習路線JSP物件程式設計師JavaJS物件