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的值

 

posted @ 2018-08-26 15:53  生心无住  阅读(239)  评论(0编辑  收藏  举报