29.Case class 和Case object代码实战解析

Case Class(样例类)是一种特殊的类,它们经过优化以被用于模式匹配。

主要的用途:1.用于传递消息 2.用于模式匹配

在Spark代码中,既可以看到case class,也可以看到case object

abstract class Person
case class Student(age : Int) extends Person  //默认val,所以特别适合于消息之间的传递
case class Worker(age : Int , salary : Double) extends Person
case object Shared extends Person

object Case_class_object_29{
  def main(args: Array[String]): Unit = {
    def caseOps(person : Person) = person match{
      case Student(age) => println("I am "+ age + " years old!" )
      case Worker(_, salary) => println("Wow, I got " + salary + "salary")
      case Shared => println("No property")
    }
    
    caseOps(Student(19))
    caseOps(Shared)
  }
}

输出:

I am 19 years old!
No property

当声明样例类时,有几下几件事发生:

1.构造器中每一个成员都默认为val

2.每个case class都有伴生对象,其中有apply方法帮忙构造出case class这个对象

3.提供unapply方法提取值,让模式匹配可以工作

4.将生成toString、equals、hashCode和copy方法

    val worker = Worker(3,3)
    val worker2 = worker.copy( salary = 2000)  //在拷贝对象时,把2000赋值给新对象的salary字段
    val worker3 = worker.copy(age = 3)
    

参考资料来源于大数据梦工厂 深入浅出scala 第29讲 由王家林老师讲解


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值