好程式設計師大資料學習路線分享Scala系列之物件
好程式設計師大資料學習路線分享 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"
)
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2658714/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師大資料學習路線分享Scala系列之抽象類程式設計師大資料抽象
- 好程式設計師大資料學習路線分享Scala系列之陣列程式設計師大資料陣列
- 好程式設計師大資料學習路線分享Scala系列之泛型程式設計師大資料泛型
- 好程式設計師大資料學習路線分享spark之Scala程式設計師大資料Spark
- 好程式設計師大資料學習路線分享Scala系列之對映Map程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之基礎篇程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之集合操作函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享scala單列和伴生物件程式設計師大資料物件
- 好程式設計師大資料學習路線分享Scala分支和迴圈程式設計師大資料
- 好程式設計師大資料學習路線分享大資料之字串程式設計師大資料字串
- 好程式設計師大資料教程分享Scala系列之閉包程式設計師大資料
- 好程式設計師大資料分享Scala系列之柯里化程式設計師大資料
- 好程式設計師大資料學習路線分享MAPREDUCE程式設計師大資料
- 好程式設計師大資料學習路線分享SparkSQl程式設計師大資料SparkSQL
- 好程式設計師大資料學習路線分享大資料之執行緒程式設計師大資料執行緒
- 好程式設計師大資料學習路線分享Hbase指令學習程式設計師大資料
- 好程式設計師大資料教程Scala系列之類程式設計師大資料
- 好程式設計師大資料學習路線分享大資料之基礎語法程式設計師大資料
- 好程式設計師大資料學習路線Hadoop學習乾貨分享程式設計師大資料Hadoop
- 好程式設計師大資料學習路線分享HDFS學習總結程式設計師大資料
- 好程式設計師大資料學習路線分享hdfs學習乾貨程式設計師大資料
- 好程式設計師大資料學習路線分享Actor學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線分享Map學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線之mapreduce概述程式設計師大資料
- 好程式設計師大資料培訓分享spark之Scala程式設計師大資料Spark
- 好程式設計師大資料學習路線分享HDFS讀流程程式設計師大資料
- 好程式設計師大資料學習路線分享AWK詳解程式設計師大資料
- 好程式設計師大資料學習路線分享UDF函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享Lambda表示式程式設計師大資料
- 好程式設計師大資料教程Scala系列之繼承程式設計師大資料繼承
- 好程式設計師大資料學習路線之zookeeper乾貨程式設計師大資料
- 好程式設計師大資料學習路線分享高階函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享Hadoop機架感知程式設計師大資料Hadoop
- 好程式設計師大資料教程分享Scala系列之Option_偏函式_String程式設計師大資料函式
- 好程式設計師大資料學習路線分享TCP和UDP學習筆記程式設計師大資料TCPUDP筆記
- 好程式設計師大資料學習路線之hive儲存格式程式設計師大資料Hive
- 好程式設計師大資料學習路線分享MapReduce全過程解析程式設計師大資料
- 好程式設計師大資料學習路線分享hive的執行方式程式設計師大資料Hive