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

一、语法简洁性

二、模式匹配便利性

三、不可变性与可变性

四、复制便捷性

相关推荐
AI+程序员在路上2 分钟前
Qt6中模态与非模态对话框区别
开发语言·c++·qt
nbsaas-boot5 小时前
Java 正则表达式白皮书:语法详解、工程实践与常用表达式库
开发语言·python·mysql
chao_7895 小时前
二分查找篇——搜索旋转排序数组【LeetCode】两次二分查找
开发语言·数据结构·python·算法·leetcode
Nejosi_念旧5 小时前
解读 Go 中的 constraints包
后端·golang·go
风无雨5 小时前
GO 启动 简单服务
开发语言·后端·golang
小明的小名叫小明5 小时前
Go从入门到精通(19)-协程(goroutine)与通道(channel)
后端·golang
斯普信专业组6 小时前
Go语言包管理完全指南:从基础到最佳实践
开发语言·后端·golang
我是苏苏7 小时前
C#基础:Winform桌面开发中窗体之间的数据传递
开发语言·c#
一只叫煤球的猫7 小时前
【🤣离谱整活】我写了一篇程序员掉进 Java 异世界的短篇小说
java·后端·程序员
斐波娜娜7 小时前
Maven详解
java·开发语言·maven