case class

10 阅读1分钟

Set 提供判断相等的方法

2个new语句不同是因为但它们创建的是两个不同的对象实例

package caseclass

object caseClass01 {

    class Stu(var name:String, var age:Int) {
      override def equals(obj:Any): Boolean = {
        val other = obj.asInstanceOf[Stu]
        other.age == age && other.name == name
      }
      override def toString: String = s"Stu($name, $age)"
    }
    def main(args:Array[String]): Unit = {
      val stu1 = new Stu("小花", 18)
      val stu2 = new Stu("小花", 18)
      println(stu1)
      println(stu1 == stu2)
      val set1 = Set(stu1, stu2)
      println(set1)
    }


}

case class的特点

1·不可变性

case class 创建的对象是不可变的,一旦创建,其属性值不能被修改。

2·实例化可以省略new

普通的class 在实例化时,必须要写new的。

3·自动重写方法

自动重写方法: toString, equals, hashCode, copy。
package caseclass

object caseClass02 {

    // 案例类
    // 案例类,相对于普通的类,它有三点不同
    // 1. 在创建对象时,可以省略 new
    // 2. 默认情况下,属性都是只读的
    // 3. 自动添加相关的equals, toString 等方法
    // 特别适合用来描述数据。
    case class Stu(name:String, age:Int)
    def main(args:Array[String]): Unit = {
      val stu1 = Stu("小花", 18)
      // 2. 默认情况下,属性都是只读的
      // stu1.age = 19
      // stu1.name = "xxx"
      val stu2 = Stu("小花", 18)
      println(stu1)
      println(stu1 == stu2)
      val set1 = Set(stu1, stu2)
      println(set1)
    }



}