Case Class(样例类)是一种特殊的类,它们经过优化以被用于模式匹配。
主要的用途:1.用于传递消息 2.用于模式匹配
在Spark代码中,既可以看到case class,也可以看到case object
abstract class Person
case class Student(age : Int) extends Person //默认val,所以特别适合于消息之间的传递
case class Worker(age : Int , salary : Double) extends Person
case object Shared extends Person
object Case_class_object_29{
def main(args: Array[String]): Unit = {
def caseOps(person : Person) = person match{
case Student(age) => println("I am "+ age + " years old!" )
case Worker(_, salary) => println("Wow, I got " + salary + "salary")
case Shared => println("No property")
}
caseOps(Student(19))
caseOps(Shared)
}
}
输出:
I am 19 years old!
No property
当声明样例类时,有几下几件事发生:
1.构造器中每一个成员都默认为val
2.每个case class都有伴生对象,其中有apply方法帮忙构造出case class这个对象
3.提供unapply方法提取值,让模式匹配可以工作
4.将生成toString、equals、hashCode和copy方法
val worker = Worker(3,3)
val worker2 = worker.copy( salary = 2000) //在拷贝对象时,把2000赋值给新对象的salary字段
val worker3 = worker.copy(age = 3)
参考资料来源于大数据梦工厂 深入浅出scala 第29讲 由王家林老师讲解