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

一、语法简洁性

二、模式匹配便利性

三、不可变性与可变性

四、复制便捷性

相关推荐
想吃火锅100510 小时前
【leetcode】405.数字转换为十六进制数js
开发语言·javascript·ecmascript
专注VB编程开发20年11 小时前
AI 生成C# WinForm 窗体 = 目前就是垃圾
开发语言·人工智能·c#
cfm_291411 小时前
JVM GC垃圾回收初步了解
java·开发语言·jvm
~小先生~11 小时前
Python从入门到放弃(一)
开发语言·python
许彰午11 小时前
17_synchronized关键字深度解析
java·开发语言
z落落11 小时前
C# 泛型接口和泛型类+泛型约束
开发语言·c#
阿正的梦工坊11 小时前
【Rust】02-变量、不可变性与基础类型
开发语言·后端·rust
阿正的梦工坊12 小时前
【Rust】08-集合类型、字符串与迭代器入门
开发语言·rust·c#
FuckPatience12 小时前
C# 使用泛型协变将派生类类型替换为基类类型
开发语言·c#
张忠琳12 小时前
【Go 1.26.4】(Part 1) Go 1.26.4 超深度源码分析 — 总体架构与模块全景
开发语言·golang