样例类—case详解

概述:case类在模式匹配和actor中经常使用到,当一个类被定义成为case类后,Scala会自动帮你创建一个伴生对象并帮你实现了一系列方法且带来了不少好处,如下:

1.实现了apply方法,意味着你不需要使用new关键字就能创建该类对象

scala> case class People(name:String,age:Int)
defined class People

scala> val p = People("mobin",22) //省略了new关键字
p: People = People(mobin,22)
  

2.实现了unapply方法,可以通过模式匹配来获取类属性,是Scala中抽取器的实现和模式匹配的关键方法。

scala> p match { case People(x,y) => println(x,y) }
(mobin,22)

 

3.实现了类构造参数的getter方法(构造参数默认被声明为val),但是当你构造参数是声明为var类型的,它将帮你实现setter和getter方法(不建议将构造参数声明为var)

构造参数为val的情况(默认):

scala> p.name
res0: String = mobin

scala> p.name = "mobin1" //报错,因为构造参数被声明为val所以并没有帮你实现setter方法
<console>:10: error: reassignment to val
p.name = "mobin1"

构造参数为var的情况:

scala> case class People(var name:String) //参数被声明为var
defined class People

scala> val p = People("mobin")
p: People = People(mobin)

scala> p.name = "mobin2"
p.name: String = mobin2

scala> p.name
res1: String = mobin2 //修改成功,并没有报错
  

4.还默认帮你实现了toString,equals,copy和hashCode等方法


比较之下case类比普通的类多了不少的方法,所以当你不需要这些额外的方法时你就可以将类定义为普通的类,但是你又不想通过new关键字来创建实例,你可以在普通类中实现apply方法达到此目的。

 因为case本就旨在创建的是不可变数据,所以在使用模式匹配时显得极为容易。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值