当定义一个类时,如果在class关键字前加上case关键字,则该类称为case类。
case类是一种特殊的类,它们经过优化以被用于模式匹配
Scala为case类自动重载了许多实用的方法,包括toString、equals和hashcode方法。
Scala为每一个case类自动生成一个伴生对象,其包括模板代码
- 一个apply方法,因此,实例化case类的时候无需使用new关键字;
- 一个unapply方法,该方法包含一个类型为伴生类的参数,返回的结果是Option类型,对应的类型参数是N元组,N是伴生类中主构造器参数的个数。Unapply方法用于对对象进行解构操作
- 在case类模式匹配中,该方法被自动调用,并将待匹配的对象作为参数传递给它
// 假设 定义一个case class:scala> case class Car(brand:String, price:Int) defined class Car //则 编译器自动生成伴生对象: scala> object Car{ | def apply(brand:String,price:Int) = new Car(brand,price) | def unapply(c:Car):Option[(String,Int)] = Some((c.brand,c.price)) | } defined object Car
来源:https://www.cnblogs.com/wooluwalker/p/12306030.html