Scala | case class

24 阅读1分钟

一、case class的定义

case class 是 Scala 中一种特殊的类,它用于创建不可变的数据容器。
object caseclass01 {
  case class Student(var id:String, var name:String) {
//    override def equals(obj: Any): Boolean = {
//      var other = obj.asInstanceOf[Student]
//      other.id == id && other.name == name
//    }

//    override def toString: String = {
//      s"Student(${id}, ${name}"
//    }
  }

  def main(args: Array[String]): Unit = {

    val stu1 = new Student("1", "小花")
    val stu2 = new Student("1", "小花")
    println(stu1)

    println(stu1 == stu2)

    val set1 = Set(stu1, stu2)
    // val  set1 = Set(1,2,3,1,1)

    println(set1)

  }

}

二、case class的特点

(1)不可变性

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

(2)实例化可以省略new

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

(3)自动重写方法

toString, equals, hashCode, copy。

三、case class 与普通class的区别

case class(样例类) VS class(类)
  • 1.case class 可以在定义对象时 省略new
  • 2.case class 的属性在默认情况下时只读的。如果可以希望修改,那需要主动使用var
  • 3.case class 会自动重写 equals, toString......
import caseclass.caseclass01.Student

/**
 * case class(样例类)  VS  class(类)
 *      1.case class 可以在定义对象时 省略new
 *      2.case class 的属性在默认情况下时只读的。如果可以希望修改,那需要主动使用var
 *      3.case class 会自动重写 equals, toString......
 *
 * 当我们只需要使用类来表示数据的时候,就可以选择使用case class,它更加简单
 */

object caseclass02 {
  case class Student1(var id:String, var name:String) {

  }
       class Student2(var id:String, var name:String) {

  }

  def main(args: Array[String]): Unit = {
    val stu1 = new Student2("1", "小花")
    val stu2 = new Student2("1", "小花")
    println(stu1 == stu2)

    println(stu1)
    println(Student("1", "小花"))
  }

}