2021年大数据常用语言Scala(三十二):scala高级用法 样例类
Posted Lansonli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 = 24
println(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(三十一):scala面向对象 特质(trait)
2021年大数据常用语言Scala(三十):scala面向对象 继承(extends)
2021年大数据常用语言Scala(三十六):scala高级用法 泛型
2021年大数据常用语言Scala(三十三):scala高级用法 模式匹配