2021年大数据常用语言Scala(三十二):scala高级用法 样例类
目錄
樣例類
定義樣例類
樣例類方法
樣例對象
樣例類
樣例類是一種特殊類,它可以用來快速定義一個用于保存數據的類(類似于Java POJO類),而且它會自動生成apply方法,允許我們快速地創建樣例類實例對象。后面,在并發編程和spark、flink這些框架也都會經常使用它。
?
定義樣例類
語法結構:
case?class?樣例類名(成員變量名1:類型1,?成員變量名2:類型2,?成員變量名3:類型3)[{類體}]
示例1:
// 定義一個樣例類
// 樣例類有兩個成員name、age
case?class?CasePerson(name:String,?age:Int)// 使用var指定成員變量是可變的
case?class?CaseStudent(var?name:String,?var?age:Int)object?CaseClassDemo {def?main(args:?Array[String]):?Unit?=?{// 1. 使用new創建實例val?zhagnsan =?new?CasePerson("張三",?20)println(zhagnsan)// 2. 使用類名直接創建實例val?lisi =?CasePerson("李四",?21)println(lisi)// 3. 樣例類默認的成員變量都是val的,除非手動指定變量為var類型//lisi.age = 22 ?// 編譯錯誤!age默認為val類型val?xiaohong =?CaseStudent("小紅",?23)xiaohong.age =?24println(xiaohong)}
}
?
樣例類方法
?
toString方法
toString返回:樣例類名稱(成員變量1, 成員變量2, 成員變量3....)
case?class?CasePerson(name:String,?age:Int)object?CaseClassDemo {def?main(args:?Array[String]):?Unit?=?{val?lisi =?CasePerson("李四",?21)println(lisi.toString)// 輸出:CasePerson(李四,21)}
}
?
equals方法
樣例類自動實現了equals方法,可以直接使用==比較兩個樣例類是否相等,即所有的成員變量是否相等
val?lisi1 =?CasePerson("李四",?21)
val?lisi2 =?CasePerson("李四",?21)
println(lisi1 ==?lisi2)
// 輸出:true
?
hashCode方法
樣例類自動實現了hashCode方法,如果所有成員變量的值相同,則hash值相同,只要有一個不一樣,則hash值不一樣。
val?lisi1 =?CasePerson("李四",?21)
val?lisi2 =?CasePerson("李四",?22)println(lisi1.hashCode())
println(lisi2.hashCode())
?
copy方法
樣例類實現了copy方法,可以快速創建一個相同的實例對象,可以使用帶名參數指定給成員進行重新賦值。
val?lisi1 =?CasePerson("李四",?21)val?wangwu =?lisi1.copy(name="王五")
println(wangwu)
?
樣例對象
?
使用case object可以創建樣例對象。樣例對象是單例的,而且它沒有主構造器。樣例對象是可序列化的。格式:
case?object?樣例對象名
它主要用在兩個地方:
定義枚舉
作為沒有任何參數的消息傳遞(后面Akka編程會講到)
?
示例:定義枚舉
trait?Sex /*定義一個性別特質*/
case?object?Male extends?Sex // 定義一個樣例對象并實現了Sex特質
case?object?Female extends?Sex case?class?Person(name:String,?sex:Sex)object?CaseClassDemo {def?main(args:?Array[String]):?Unit?=?{val?zhangsan =?Person("張三",?Male)println(zhangsan)}
}
?
示例:定義消息
case?class?StartSpeakingMessage(textToSpeak:?String)
// 消息如果沒有任何參數,就可以定義為樣例對象
case?object?StopSpeakingMessage
case?object?PauseSpeakingMessage
case?object?ResumeSpeakingMessage
?
樣例類可以使用類名(參數1, 參數2...)快速創建實例對象
定義樣例類成員變量時,可以指定var類型,表示可變。默認是不可變的
樣例類自動生成了toString、equals、hashCode、copy方法
樣例對象沒有主構造器,可以使用樣例對象來創建枚舉、或者標識一類沒有任何數據的消息
總結
以上是生活随笔為你收集整理的2021年大数据常用语言Scala(三十二):scala高级用法 样例类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构算法 简单的面试思考题
- 下一篇: 2021年大数据常用语言Scala(三十