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")
}
}
}
