scala-24-样例类
2020-04-17 本文已影响0人
chen_666
基本介绍
- 1)样例类仍然是类
- 2)样例类用 case 关键字进行声明。
- 3)样例类是为模式匹配而优化的类
- 4)构造器中的每一个参数都成为 val——除非它被显式地声明为 var(不建议这样做)
- 5)在样例类对应的伴生对象中提供 apply 方法让你不用 new 关键字就能构造出相应的对象
- 6)提供 unapply 方法让模式匹配可以工作
- 7)将自动生成 toString、equals、hashCode 和 copy 方法(有点类似模板类,直接给生成,供程序员使用)
- 8)除上述外,样例类和其他类完全一样。你可以添加方法和字段,扩展它们
object CaseClassDemo02 {
def main(args: Array[String]): Unit = {
//该案例的作用就是体验使用样例类方式进行对象匹配简洁性
for (amt <- Array(Dollar2(1000.0), Currency2(1000.0, "RMB"), NoAmount2)) {
val result = amt match {
//说明
case Dollar2(v) => "$" + v // $1000.0
//说明
case Currency2(v, u) => v + " " + u // 1000.0 RMB
case NoAmount2 => "" // ""
}
println(amt + ": " + result)
}
}
}
abstract class Amount2
case class Dollar2(value: Double) extends Amount2 //样例类
case class Currency2(value: Double, unit: String) extends Amount2 //样例类
case object NoAmount2 extends Amount2 //样例类
克隆
object CaseClassDemo03 {
def main(args: Array[String]): Unit = {
val amt = new Currency3(3000.0,"RMB")
val amt2 = amt.copy() // 克隆,创建的对象和amt的属性一样
println("amt2.value" + amt2.value + " amt2.unit= " + amt2.unit)
println(amt2)
val amt3 = amt.copy(value = 8000.0)
println(amt3)
val amt4 = amt.copy(unit = "美元")
}
}
abstract class Amount3
case class Dollar3(value: Double) extends Amount3 //样例类
case class Currency3(value: Double, unit: String) extends Amount3 //样例类
case object NoAmount3 extends Amount3 //样例类