当你声明了一个 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"
^