模式比對入門
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相關技術資訊