當你聲明了一個 case class,Scala 編譯器為你做了這些:
-
創建 case class 和它的伴生 object
-
實現了 apply 方法讓你不需要通過 new 來創建類實例
- 默認為主構造函數參數列表的所有參數前加 val
- 添加天然的 hashCode、equals 和 toString 方法。由於 == 在 Scala 中總是代表 equals,所以 case class 實例總是可比較的
- 生成一個
copy方法以支持從實例 a 生成另一個實例 b,實例 b 可以指定構造函數參數與 a 一致或不一致
scala> val person = Person("xioaming","wang",2000)
person: Person = Person(xioaming,wang,2000)
scala> person.lastname
res0: String = xioaming
scala> person.lastname = "h"
<console>:12: error: reassignment to val
person.lastname = "h"
^
