Scala case class

Case Class一般被翻譯成樣例類,它是一種特殊的類,能夠被優化以用於模式匹配,下面的代碼定義了一個樣例類:

//抽象類Person
abstract class Person

//case class Student
case class Student(name:String,age:Int,studentNo:Int) extends Person
//case class Teacher
case class Teacher(name:String,age:Int,teacherNo:Int) extends Person
//case class Nobody
case class Nobody(name:String) extends Person

object CaseClassDemo{
  def main(args: Array[String]): Unit = {
    //case class 會自動生成apply方法,從而省去new操作
    val p:Person=Student("john",18,1024)  
    //match case 匹配語法  
    p  match {
      case Student(name,age,studentNo)=>println(name+":"+age+":"+studentNo)
      case Teacher(name,age,teacherNo)=>println(name+":"+age+":"+teacherNo)
      case Nobody(name)=>println(name)
    }
  }
}

當一個類被聲名爲case class的時候,scala會幫助我們做下面幾件事情:
1 構造器中的參數如果不被聲明爲var的話,它默認的話是val類型的,但一般不推薦將構造器中的參數聲明爲var
2 自動創建伴生對象,同時在裏面給我們實現子apply方法,使得我們在使用的時候可以不直接顯示地new對象
3 伴生對象中同樣會幫我們實現unapply方法,從而可以將case class應用於模式匹配,關於unapply方法我們在後面的“提取器”那一節會重點講解
4 實現自己的toString、hashCode、copy、equals方法
除此之此,case class與其它普通的scala類沒有區別
 

Scala伴生對象 
如果有同樣一個類與該object名字一樣,則稱該object爲該類的伴生對象,相對應,該類爲object的伴生類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章