1.语法
case class(字段列表) {}
2.怎样理解scala中样例类
scala编译器 会对样例类(case 修饰的类) 自动添加一些语法上的实现
2.1 添加 伴生对象
2.2 混入 Product, Serializable 特质
2.3 添加 toString、hashCode、equals 的`默认实现`
case class CaseClass(name: String)
class NoCaseClass(name: String)
/*
* TODO 对比 样例类自动帮我们实现的方法
* */
object PersonTest extends App {
// 对比 toString
println(s"样例类-toString: ${CaseClass("大王")}")
println(s"非样例类-toString: ${new NoCaseClass("大王")}")
// 对比 hashCode
println(s"样例类-hashCode: ${CaseClass("大王").hashCode()} | ${CaseClass("大王").hashCode()}")
println(s"非样例类-hashCode: ${new NoCaseClass("大王").hashCode()} | ${new NoCaseClass("大王").hashCode()}")
// 对比 equals(==)
println(s"样例类-equals: ${new CaseClass("大王") == new CaseClass("大王")} ")
println(s"非样例类-equals: ${new NoCaseClass("大王") == new NoCaseClass("大王")} ")
}
2.4 添加 copy 方法 (获取类的新实例)
case class cPerson(id: Int, name: String, age: Int)
object CopyDemo extends App {
/*
* 样例类 默认实现了多种方式的copy实现,当不填充参数时,将使用老对象中的原值
*
* */
val p1: cPerson = cPerson(10, "张飞", 28).copy()
println(s"p1: ${p1}")
val p2: cPerson = cPerson(10, "张飞", 28).copy(99)
println(s"p2: ${p2}")
val p3: cPerson = cPerson(10, "张飞", 28).copy(name = "刘备")
println(s"p3: ${p3}")
}
3. 使用样例类的好处
1.用case修饰类会 编译器帮助我们默认添加很多实现 (书写很少的代码 获取更多实现)
2.最大的好处还是样例类对支持模式匹配
具体的说 样例类能够支持模式匹配中的 构造器模式