樣例類使用case class 類名(參數名:參數類型)來聲明。可以用來模式匹配。
樣例類的特性:
1. 在伴生對象中提供apply方法,初始化時可以不用new
case class Calc(name:String)
val sum = Calc("sum")
2. 默認實現了toString、equal、hashCode和copy方法
case class Calc(name:String)
val sum = Calc("sum")
println(sum)
結果:
Calc(sum)
普通類的toString
case Calc(name:String)
val sum = new Calc("sum")
println(sum)
結果:
com.scalatest.Calc@4e1d422d
3. 構造器中的每一個參數都成爲val,除非顯示聲明爲var
4. case class構造函數的參數是public級別的,我們可以直接訪問
val sum = Calc("sum")
sum.name
5. 提供unapply方法,支持模式匹配
class Calc()
case class Sum(name:String="sum") extends Calc
case class Avg(name:String="avg") extends Calc
def calculate (calc: Calc) {
calc match {
case s:Sum =>
println(s.name)
case a:Avg =>
println(a.name)
case _ =>
println("other")
}
}
calculate(Sum())
calculate(Avg())
結果:
sum
avg