大資料學習:物件
大資料學習:物件
5.2.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應用程式的入口點。
5.2.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
())
}
}
5.2.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
))
}
}
5.2.4. 應用程式物件
Scala程式都必須從一個物件的main方法開始,可以透過擴充套件App特質,不寫main方法。
object
Hello
extends
App{
println
(
"Hello World"
)
}
同
object
Hello {
def
main
(args: Array[String]): Unit = {
println
(
"Hello World"
)
}
}
5.2.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/69947096/viewspace-2659537/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 大資料學習之路——java物件導向(二)大資料Java物件
- 大資料學習資料大資料
- 大資料學習大資料
- 大資料學習大綱,大資料應該怎麼學大資料
- 如何學習大資料?大資料
- 大資料學習02大資料
- 想學習大資料?這才是完整的大資料學習體系大資料
- 大資料如何學習,大資料工程師學習經驗分享大資料工程師
- Sql Server 資料庫學習-常用資料庫 物件SQLServer資料庫物件
- 大資料學習:怎樣進行大資料的入門級學習?大資料
- 大資料學習:閉包大資料
- 大資料學習:抽象類大資料抽象
- 大資料學習路線大資料
- 大資料學習目錄大資料
- 大資料分析學習之路大資料
- 大資料的系統學習:大資料學習的三個階段概述大資料
- 大資料學習|小白學習大資料需要滿足這六個條件你就能學好大資料大資料
- 為什麼學習大資料,大資料專家寫給大資料分析學習者的10個理由大資料
- 大資料學習路線圖 讓你精準掌握大資料技術學習大資料
- 小白如何學習大資料開發,大資料學習路線是怎樣的?大資料
- 淺析大資料 學習大資料後能做什麼大資料
- 究竟多大才算是大資料,大資料怎麼學習?大資料
- 大資料學習筆記(十五)-大資料排程框架大資料筆記框架
- 大資料主要學習什麼?大資料
- 大資料學習路線圖大資料
- 分享學習大資料的方法大資料
- 大資料學習注意事項大資料
- 大資料學習—Azkaban的解析大資料
- 大資料學習筆記(四)大資料筆記
- 大資料學習筆記(五)大資料筆記
- 大資料學習筆記(六)大資料筆記
- 我的大資料學習之路大資料
- 大資料最佳學習路線大資料
- 大資料分析學習規劃大資料
- 大資料學習方法,學大資料需要的基礎和路線大資料
- 好程式設計師大資料學習路線分享Scala系列之物件程式設計師大資料物件
- 什麼是大資料?零基礎如何學習大資料?(附學習路線)大資料
- 大資料到底怎麼學:資料科學概論與大資料學習誤區大資料資料科學