Java & Groovy & Scala & Kotlin - 18.樣本類 (Scala)

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é)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,662評論 18 399
  • 前言 人生苦多,快來 Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,688評論 9 118
  • Overview 類在面向?qū)ο缶幊讨惺且粋€最基本的概念。類是對象的模板,用于產(chǎn)生具有相同結(jié)構(gòu)的對象。一個類通常由屬...
    bookislife閱讀 972評論 0 0
  • 01. 錦月,躺在醫(yī)院的重癥病房里,準(zhǔn)確的說,躺在那兒的僅僅只是她的一副軀體。 曾經(jīng)的錦月并不相信人有靈魂這一說法...
    七月冬眠閱讀 1,482評論 18 49
  • 禪坐于墊子上,雙腿伸直,雙手落于體后,指尖朝向臀部方向。 屈雙膝,腳底著地即可,深吸氣,脊柱延伸,上抬髖臀向上,大...
    aily群閱讀 5,412評論 0 1

友情鏈接更多精彩內(nèi)容