美文网首页Scala
scala-24-样例类

scala-24-样例类

作者: chen_666 | 来源:发表于2020-04-17 00:12 被阅读0次

基本介绍

  • 1)样例类仍然是类
  • 2)样例类用 case 关键字进行声明。
  • 3)样例类是为模式匹配而优化的类
  • 4)构造器中的每一个参数都成为 val——除非它被显式地声明为 var(不建议这样做)
  • 5)在样例类对应的伴生对象中提供 apply 方法让你不用 new 关键字就能构造出相应的对象
  • 6)提供 unapply 方法让模式匹配可以工作
  • 7)将自动生成 toString、equals、hashCode 和 copy 方法(有点类似模板类,直接给生成,供程序员使用)
  • 8)除上述外,样例类和其他类完全一样。你可以添加方法和字段,扩展它们
object CaseClassDemo02 {
  def main(args: Array[String]): Unit = {
    //该案例的作用就是体验使用样例类方式进行对象匹配简洁性
    for (amt <- Array(Dollar2(1000.0), Currency2(1000.0, "RMB"), NoAmount2)) {
      val result = amt match {
        //说明
        case Dollar2(v) => "$" + v // $1000.0
        //说明
        case Currency2(v, u) => v + " " + u // 1000.0 RMB
        case NoAmount2 => "" // ""
      }
      println(amt + ": " + result)
    }
  }
}

abstract class Amount2
case class Dollar2(value: Double) extends Amount2    //样例类
case class Currency2(value: Double, unit: String) extends Amount2 //样例类
case object NoAmount2 extends Amount2  //样例类

克隆

object CaseClassDemo03 {
  def main(args: Array[String]): Unit = {
    val amt = new Currency3(3000.0,"RMB")
    val amt2 = amt.copy() // 克隆,创建的对象和amt的属性一样
    println("amt2.value" + amt2.value + " amt2.unit= " + amt2.unit)
    println(amt2)

    val amt3 = amt.copy(value = 8000.0)
    println(amt3)

    val amt4 = amt.copy(unit = "美元")
  }
}


abstract class Amount3
case class Dollar3(value: Double) extends Amount3    //样例类
case class Currency3(value: Double, unit: String) extends Amount3 //样例类
case object NoAmount3 extends Amount3  //样例类

相关文章

网友评论

    本文标题:scala-24-样例类

    本文链接:https://www.haomeiwen.com/subject/csajvhtx.html