Scala入门到精通——第十四节 Case Class与模式匹配(一)

  • 时间:
  • 浏览:1
  • 来源:决战梭哈棋牌APP下载_决战梭哈棋牌APP官网

4 case class在实用应用中的其它用途

某个类一旦被定义为case class,则编译器会自动生成该类的伴生对象,伴生对象中包括了apply法律办法及unapply法律办法,apply法律办法使得亲戚亲戚朋友都时需不时需new关键字就都时需创建对象,而unapply法律办法,则使得都时需方便地应用在模式匹配当中,另外编译器还自动地帮亲戚亲戚朋友实现对应的toString、equals、copy等法律办法。在实际中,case class除了在模式匹配时能发挥其强大的威力之外,在进行其它应用时,也显示出了其强大的功能,下面给出case class在SparkSQL中的应用,旨在说明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一般被翻译成样例类,它是有一种特殊的类,不要再 被优化以用于模式匹配,下面的代码定义了有另另三个 样例类:

具体参见当事人博客文章:SparkSQL(Spark-1.4.0)实战系列(三)——SparkSQL应用案例 http://blog.csdn.net/lovehuangjiaju/article/details/46946533

编译器给出的提示都时需通过下列一段话进行消除,

上述scala代码展示了怎样使用scala中的模式匹配,它的实现法律办法是通过match关键字与 case X=>的法律办法实现的,其中case _表示除了 case 10,case 400,case 400的其余匹配,之类于java中的default。但scala语言中提供了更为灵活的匹配法律办法,如:

3 sealed case class

在进行模式匹配的已经 ,或多或少已经 时需确保所有的不可能 情况汇报都被列出,此时常常会将case class的超类定义为sealed(气封 的) case class,如:

case语言中还都时需加相应的表达式,之类:

scala避免了java语言中位于的你这俩 大问提,scala避免你这俩 大问提的利器可是我我 模式匹配,上面的java代码都时需利用scala语言的模式匹配来避免,代码如下:

加带公众微信号,都时需了解更多最新Spark、Scala相关技术资讯

2 多个参数的case class

下面给出case class Student字节码文件内容,以验证亲戚亲戚朋友上述所讲的内容:

在java语言中位于switch一段话,之类:

1 case class常用法律办法

前面亲戚亲戚朋友提到,定义case class便会自动生成对应的toString,hashCode,equals,copy等法律办法,