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的区别

一、语法简洁性

二、模式匹配便利性

三、不可变性与可变性

四、复制便捷性

相关推荐
程序员爱钓鱼10 分钟前
Go语言实战案例——进阶与部署篇:性能优化与 pprof 性能分析实践
后端·google·go
爱编程的小白L1 小时前
基于springboot志愿服务管理系统设计与实现(附源码)
java·spring boot·后端
Kiri霧3 小时前
Linux下的Rust 与 C 的互操作性解析
c语言·开发语言·rust
雪芽蓝域zzs4 小时前
uniapp AES 加密解密
开发语言·uni-app·c#
雨夜的星光4 小时前
Python JSON处理:load/loads/dump/dumps全解析
开发语言·python·json
fen_fen5 小时前
Java打包时,不将本地Jar打包到项目的最终 JAR 中
开发语言·python·pycharm
稚辉君.MCA_P8_Java5 小时前
JVM第二课:一文讲透运行时数据区
jvm·数据库·后端·容器
wjs20247 小时前
SQL AND & OR 操作符详解
开发语言
~光~~7 小时前
【环境配置 】WSL2 +ubuntu20.04 +Qt配置+Kits配置
开发语言·qt·ubuntu
·心猿意码·7 小时前
C++右值语义解析
开发语言·c++