模式匹配入门
case class简介
case class进阶
在java语言中存在switch语句,例如:
scala解决了java语言中存在的这个问题,scala解决这一问题的利器就是模式匹配,上面的java代码可以利用scala语言的模式匹配来避免,代码如下:
上述scala代码展示了如何使用scala中的模式匹配,它的实现方式是通过match关键字与 case x=>的方式实现的,其中case _表示除了 case 10,case 50,case 80的其余匹配,类似于java中的default。但scala语言中提供了更为灵活的匹配方式,如:
case语言中还可以加相应的表达式,例如:
case class一般被翻译成样例类,它是一种特殊的类,能够被优化以用于模式匹配,下面的代码定义了一个样例类:
当一个类被声名为case class的时候,scala会帮助我们做下面几件事情:
1 构造器中的参数如果不被声明为var的话,它默认的话是val类型的,但一般不推荐将构造器中的参数声明为var
2 自动创建伴生对象,同时在里面给我们实现子apply方法,使得我们在使用的时候可以不直接显示地new对象
3 伴生对象中同样会帮我们实现unapply方法,从而可以将case class应用于模式匹配,关于unapply方法我们在后面的“提取器”那一节会重点讲解
4 实现自己的tostring、hashcode、copy、equals方法
除此之此,case class与其它普通的scala类没有区别
下面给出case class student字节码文件内容,以验证我们上述所讲的内容:
1 case class常用方法
前面我们提到,定义case class便会自动生成对应的tostring,hashcode,equals,copy等方法,
2 多个参数的case class
3 sealed case class
在进行模式匹配的时候,有些时候需要确保所有的可能情况都被列出,此时常常会将case class的超类定义为sealed(密封的) case class,如:
编译器给出的提示可以通过下列语句进行消除,
4 case class在实用应用中的其它用途
某个类一旦被定义为case class,则编译器会自动生成该类的伴生对象,伴生对象中包括了apply方法及unapply方法,apply方法使得我们可以不需要new关键字就可以创建对象,而unapply方法,则使得可以方便地应用在模式匹配当中,另外编译器还自动地帮我们实现对应的tostring、equals、copy等方法。在实际中,case class除了在模式匹配时能发挥其强大的威力之外,在进行其它应用时,也显示出了其强大的功能,下面给出case class在sparksql中的应用,旨在说明case class在实际应用中的重要地位。
添加公众微信号,可以了解更多最新spark、scala相关技术资讯
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI1MjN4UjNzQTM5EzNwUTMwIzLcRXZu5ibkN3Yuc2bsJmLn1Wavw1LcpDc0RHaiojIsJye.jpg)