Overview
- 樣本類是 Scala 中使用關(guān)鍵字
case class聲明的類。它可以隱式調(diào)用構(gòu)造方法進(jìn)行初始化,樣本類沒有副構(gòu)造方法。 - 樣本類默認(rèn)基于構(gòu)造方法實現(xiàn)了
toString(),equals()和hashCode()方法,不在構(gòu)造方法中定義的屬性不會產(chǎn)生在toString()的結(jié)果中。 - 樣本類可以直接使用
==進(jìn)行比較,同樣不在構(gòu)造方法中定義的屬性不會用在比較上 - 樣本類被大量使用在模式匹配中
定義樣本類
case class Number(n: Int) {
var comment: String = "Default Comment"
def eval: Int = n
}
case class Sum(n1: Number, n2: Number) {
var comment: String = "Default Comment"
def eval: Int = n1.eval + n2.eval
}
以上定義了兩個樣本類,其中樣本類 Sum 用于計算兩個樣本類 Number 的和。
使用樣本類
樣本類在初始化時可以隱式調(diào)用構(gòu)造方法,所以無需使用 new 關(guān)鍵字。
val n = Number(1)
樣本類默認(rèn)實現(xiàn)了 toString() 方法,該方法覆蓋了構(gòu)造方法中的所有參數(shù),而類中定義的變量不會被寫到 toString() 方法中
println(n.toString)
樣本類默認(rèn)實現(xiàn)了 equals() 方法,該方法覆蓋了構(gòu)造方法中的所有參數(shù),而類中定義的變量不會被寫到 equals() 方法中
val result1 = Sum(Number(10), Number(20))
result1.comment = "result1"
val result2 = Sum(Number(10), Number(20))
result2.comment = "result2"
println(result1 == result2) // true
文章源碼見 https://github.com/SidneyXu/JGSK 倉庫的 scala/_18_case_class 小節(jié)