object CaseClassDemo { def main(args: Array[String]): Unit = { //定义样例类 //默认带有apply方法 //构造函数的参数默认是public val修饰的 //虽然可以显示的将其改为var修饰的,但是不推荐这种方法 case class Message(sender: String, var recipient: String, body: String) val message1 = Message("zhangsan", "lisi", "hello") val message2 = Message("zhangsan", "lisi", "hello") println(message1.sender) // message1.sender="" message1.recipient = "wangwu" //样例类的比较,基于值或者结构比较,而不是基于引用比较 println(message1 == message2) //样例类的copy val message3 = message1.copy() println("message3:" + message3.sender + "," + message3.recipient + "," + message3.body) println(message1 == message3) //不完全拷贝,对部分参数进行赋值 val message4 = message1.copy(sender = "zhaoliu") println("message4:" + message4.sender + "," + message4.recipient + "," + message4.body) } } |
- 样例类必须显示的生命一个主构造器;
- 自动会构造一个空的辅助构造函数
- 自动混入序列化的特质
- 默认重写toStrinfg方法
- 不需要new,就可以构建对象
- 后面开发spark程序的时候,封装bean习惯上使用case class来封装