1.當一個類被聲明為case class時,編譯器會自動進行如下操作:
.構造器中參數如果沒有被聲明為var,則默認為val類型;
.自動創建伴生對象,同時在伴生對象中實現apply方法,這樣在使用時就不用顯式地使用new對象;
.伴生對象中同樣可以實現unapply(),從而可以將case class應用於模式匹配;
package smart.iot abstract class Persons(name:String) //構造器中參數如果沒有被聲明為var,則默認為val類型 case class Student(name:String,age:Int,stuentNo:Int) extends Persons(name) case class Teacher(name:String,age:Int,teacherNo:Int) extends Persons(name) case class Nobody(name:String) extends Persons(name) object CaseClass { def main(args: Array[String]): Unit = { //case class 會自動生成apply方法,從而省去了new var p:Persons=Student("james",20,1) p match{ case p:Student=>println("class is a student") case p:Teacher=>println("class is a teacher") case p:Nobody=>println("class is nobody") } } }
2. Map 中的case class 使用
package smart.iot class mapCase { } object mapCase { def main(args: Array[String]): Unit = { var map=Map(1->2) map.get(1) match { //map 的key是Some類型的 case Some(_)=>println("kes is exists") //如果key不存在會返回None值 case None =>println("kes is None") case _=>println("other") } } }