内容:
1、Case Class代码实战解析
2、Case Object实战解析
(用于传递消息和模式匹配)
<span style="white-space:pre"> </span>abstract class Person
<span style="white-space:pre"> </span>case class Student(age: Int) extends Person
<span style="white-space:pre"> </span>case class Worker(age: Int, salary: Double) extends Person
<span style="white-space:pre"> </span>case object Shared extends Person
Student扩展了一个不可变属性age,Worker扩展了2个不可变属性age和salary,以用来传递消息。Case Object扩展一个共享对象或唯一对象。
def caseOps(person: Person) = person match {
case Student(age) => println("I am " + age + "years old")
case Worker(_, salary) => println("Wow, I got " + salary)
case Shared => println("No property")
}
caseOps(Student(19))
caseOps(Shared)
使用模式匹配提取到case class中的student属性值,以及case object中的共享对象Shared。
<span style="white-space:pre"> </span>val worker = Worker(29, 10000.1)
<span style="white-space:pre"> </span>val worker2 = worker.copy(salary = 19.95)
<span style="white-space:pre"> </span>val worker3 = worker.copy(age = 30)
//调用copy方法改变worker中的值;
每个case class中都会有伴生对象apply方法(作用:构建对象),伴生对象会帮我们构建出具体的对象,重要的是模式匹配时候会从case class中提取处理,提取方法也为伴生对象中的UNapply(作用:从构建的对象中提取内容)其中包含了copy、equres、toString方法等。