Scala的case class

定义语法:

特点

1.不可变性:创建对象的属性不可变

2.创建对象不用写new

3.自动重写方法:toString,equals,hashCode,copy

Scala 复制代码
import scala.collection.mutable

//定义一个Book类
//实例化两本不相同的书,把他们放入Set

case class Book(val id:String, val name:String, val stock:Int)

//测试类

object ddd {
  def main(args: Array[String]): Unit = {
    val book1 =  Book("001","高效人士的七个习惯",3)
    
    println(book1)
    // book1.id="002"
    val book2 = new Book("001","高效人士的七个习惯",3)
    val book3 = new Book("001","高效人士的七个习惯",3)
    //book1==book1
    //book2==book1


    println(book1==book2)
    //定义一个用来装书的可变Set
    val books = mutable.Set[Book]()

    //Set可以去重,但是他需要去比较两个元素是否相等
    //添加一本书
    books += book1
    books +=book2
    books +=book3
    println(books)
  }

}

不用case class代码如下:

Scala 复制代码
import scala.collection.mutable

//定义一个Book类
//实例化两本不相同的书,把他们放入Set

class Book(val id:String, val name:String, val stock:Int){
  override def equals(obj: Any): Boolean = {
    val o =obj.asInstanceOf[Book]
    o.id ==id
  }
  //获取 hasCode
  override def hashCode():Int={
    id.hashCode

  }
}
//测试类

object dddd {
  def main(args: Array[String]): Unit = {
    val book1 = new Book("001","高效人士的七个习惯",3)

    println(book1)
    // book1.id="002"
    val book2 = new Book("001","高效人士的七个习惯",3)
    val book3 = new Book("001","高效人士的七个习惯",3)
    //book1==book1
    //book2==book1


    println(book1==book2)
    //定义一个用来装书的可变Set
    val books = mutable.Set[Book]()

    //Set可以去重,但是他需要去比较两个元素是否相等
    //添加一本书
    books += book1
    books +=book2
    books +=book3
    println(books)
  }

}

1.case class的定义语法是什么?

case class 类名(参数 1: 类型 1, 参数 2: 类型 2,...)

2.case class有哪些作用?

一、简洁的构造方式

二、自动生成方法

三、模式匹配

四、不可变数据结构

五、方便的复制和修改

3.case class和普通class的区别

一、语法简洁性

二、模式匹配便利性

三、不可变性与可变性

四、复制便捷性

相关推荐
自由生长20242 分钟前
理解 Java Stream API:从实际代码中学习
后端
小许好楠8 分钟前
java开发工程师-学习方式
java·开发语言·学习
superman超哥25 分钟前
仓颉锁竞争优化深度解析
c语言·开发语言·c++·python·仓颉
Halo_tjn25 分钟前
基于 IO 流实现文件操作的专项实验
java·开发语言
一晌小贪欢26 分钟前
【Python办公自动化】Python办公自动化常用库新手指南
开发语言·python·python自动化办公·python3·python办公自动化·python办公
业精于勤的牙34 分钟前
最长特殊序列(二)
java·开发语言·算法
回家路上绕了弯42 分钟前
深度解析分布式事务3PC:解决2PC痛点的进阶方案
分布式·后端
yong99901 小时前
C#实现OPC客户端与S7-1200 PLC的通信
开发语言·网络·算法·c#
狗头大军之江苏分军1 小时前
快手12·22事故原因的合理猜测
前端·后端
charlie1145141911 小时前
快速在WSL上开发一般的C++上位机程序
开发语言·c++·笔记·学习·环境配置·工程