用一个例子告诉你 什么是scala中的样例类

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.最大的好处还是样例类对支持模式匹配

          具体的说 样例类能够支持模式匹配中的 构造器模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值