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