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 样例类的主要内容,如果未能解决你的问题,请参考以下文章