case class 的定义
case class 是 Scala 中一种特殊的类,它用于创建不可变的数据容器。
package caseclass
object caseclass01 {
class Student(var id:String,var name:String) {
}
def main(args: Array[String]): Unit = {
val stu1 = new Student("1","小花")
val stu2 = new Student("1","小花")
println(stu1) //caseclass.caseclass01$Student@4c203ea1
println(stu1 == stu2) //false
val set1 = Set(stu1,stu2)
println(set1) //Set(caseclass.caseclass01$Student@4c203ea1, caseclass.caseclass01$Student@47f6473)
}
}
运用equals方法
package caseclass
object caseclass01 {
class Student(var id:String,var name:String) {
override def equals(obj: Any): Boolean = {
val 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) //Student(1,小花)
println(stu1 == stu2) //true
val set1 = Set(stu1,stu2)
println(set1) //Set(Student(1,小花))
}
}
改为case class样例类,与运用了equals方法的运行结果一样
package caseclass
object caseclass01 {
case class Student(var id:String,var name:String) {
}
def main(args: Array[String]): Unit = {
val stu1 = new Student("1","小花")
val stu2 = new Student("1","小花")
println(stu1) //Student(1,小花)
println(stu1 == stu2) //true
val set1 = Set(stu1,stu2)
println(set1) //Set(Student(1,小花))
}
}
case class的特点
1.case class可以在定义对象时,省略new
object caseclass02 {
case class Student1(var id:String,var name:String) {
}
def main(args: Array[String]): Unit = {
//省略new
val stu1 = Student1("1","小花")
println(stu1)
2.case class的属性在默认情况下是val,只读的。如果希望修改,需要主动改为var
object caseclass02 {
case class Student1(id:String,name:String) {
}
def main(args: Array[String]): Unit = {
val stu1 = Student1("1","小花")
// stu1.name = "小明" 报错!默认val,不能修改
3.case class 会自动重写equals,tiString...
object caseclass02 {
case class Student1(id:String,name:String) {
}
def main(args: Array[String]): Unit = {
val stu1 = Student1("1","小花")
val stu2 = new Student1("1","小花")
println(stu1 == stu2) //true 因为重写了equals方法