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

一、语法简洁性

二、模式匹配便利性

三、不可变性与可变性

四、复制便捷性

相关推荐
程序员小假24 分钟前
我们来说一下 b+ 树与 b 树的区别
java·后端
阿贵---41 分钟前
C++中的RAII技术深入
开发语言·c++·算法
Traced back1 小时前
怎么用 Modbus 让两个设备互相通信**,包含硬件接线、协议原理、读写步骤,以及 C# 实操示例。
开发语言·c#
Meepo_haha1 小时前
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
java·spring boot·后端
sheji34161 小时前
【开题答辩全过程】以 基于springboot的房屋租赁系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
Victor3562 小时前
MongoDB(57)如何优化MongoDB的查询性能?
后端
Victor3562 小时前
MongoDB(58)如何使用索引优化查询?
后端
行百里er2 小时前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·代码规范
娇娇yyyyyy2 小时前
QT编程(17): Qt 实现自定义列表模型
开发语言·qt