scala 样例类

Posted jason-dong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scala 样例类相关的知识,希望对你有一定的参考价值。

一.case class 的特征

package com.jason.qianfeng

case class Message(sender: String, receiver: String, body: String)

object CaseClassTest {
  def main(args: Array[String]): Unit = {
    println("==case class 的比较")
    val mes = Message("jason", "wus", "starbuck")
    val mes2 = Message("jason", "wus", "starbuck")
    println(s"mes : ${mes.toString}")
    println(s"mes2 : ${mes2.toString}")
    println(s" mes == mes2 ? :${mes == mes2}")
    println("==case class copy 方法")
    val mes3 = mes.copy()
    println(s"mes == mes3 ? : ${mes == mes3}")
    println(s"==case class 部分copy")
    val mes4 = mes.copy(sender = "fan")
    println(s"mes: ${mes.toString}")
    println(s"mes4: ${mes4.toString}")
  }
}

运行结果如下:

==case class 的比较
mes : Message(jason,wus,starbuck)
mes2 : Message(jason,wus,starbuck)
 mes == mes2 ? :true
==case class copy 方法
mes == mes3 ? : true
==case class 部分copy
mes: Message(jason,wus,starbuck)
mes4: Message(fan,wus,starbuck)

总结:

1.case class 默认实现了apply 方法,所以可以用val mes = Message("jason", "wus", "starbuck") 方法来创建对象

2.case class 重写了toString方法,

3.case class 主构造函数中的参数默认是 public val修饰的

4.case class 的比较是基于值的,并不是引用地址的比较

5.case class 的copy 可以实现部分copy,例如

 val mes4 = mes.copy(sender = "fan") 

mes4 的 sender 被赋值为“fan” ,其他值沿用mes的值

 

以上是关于scala 样例类的主要内容,如果未能解决你的问题,请参考以下文章

介绍Scala的样例类

必会Scala之模式匹配和样例类

2021年大数据常用语言Scala(三十二):scala高级用法 样例类

Scala快速入门--样例类

Scala笔记整理:模式匹配和样例类

Scala:样例类模式匹配Option偏函数泛型