Scala:case class(通俗易懂版)

1. case class 是什么?

想象你要做一个表格,比如学生信息表,每一行需要填:姓名、年龄、成绩 。

在代码里,这种"表格的一行"就是一个数据对象,case class 就是帮你快速创建这种"表格行"的工具。

普通方法(麻烦版):

你要自己写很多代码定义"学生"的类,还要写各种方法(比如打印信息、比较是否相同等),麻烦!

用 case class(省事版):

你只需要写一行代码,剩下的(打印信息、比较等)自动生成!

scala复制代码

复制代码
// 定义一个"学生"模板(包含姓名、年龄、成绩)
case class Student(name: String, age: Int, score: Double)

// 创建具体的学生对象(不用写 new!)
val alice = Student("Alice", 20, 95.5)  // 自动生成!
val bob = Student("Bob", 22, 88.0)

2. case class 有啥好处?

① 直接拿数据,不用写 new

scala复制代码

复制代码
// 普通类必须写 new
class Animal(name: String)
val cat = new Animal("Tom")

// case class 不用写 new!自动创建对象
case class Animal(name: String)
val dog = Animal("Buddy")  // 自动帮你 new!
② 自动生成"打印信息"

scala复制代码

复制代码
// 普通类打印是看不懂的地址
println(cat)  // 输出:Animal@4e50df2e

// case class 打印具体数据
println(dog)  // 输出:Animal(Buddy)
③ 自动比较内容是否相同

scala复制代码

复制代码
val dog1 = Animal("Buddy")
val dog2 = Animal("Buddy")

// 普通类比较地址,不同
println(cat == new Animal("Tom"))  // false

// case class 比较内容,相同!
println(dog1 == dog2)  // true
④ 模式匹配超方便(拆开数据用)

scala复制代码

复制代码
def checkStudent(student: Student): String = student match {
    case Student("Alice", 20, _) => "这是Alice,年龄20!"
    case Student(_, age, score) if score < 60 => "不及格!"
    case _ => "其他学生"
}

println(checkStudent(alice))  // 输出:这是Alice,年龄20!

3. 什么时候用 case class?

  • 当你的类主要是用来装数据的时候(比如学生信息、订单信息)。
  • 当你需要快速比较、打印、复制数据的时候。
  • 当你想用模式匹配拆解数据的时候。

4. 超简单总结

  • case class = 自动生成的数据盒子
    (帮你省掉写一堆代码的麻烦,还能方便拆开用)
  • 常用在:数据存储、模式匹配、传输消息(比如聊天消息)。

动手试试! 你可以在代码里写一个 case class,体验它的方便之处。例如:

scala复制代码

复制代码
case class Book(title: String, price: Double)
val myBook = Book("Scala入门", 39.9)
println(myBook)  // 试试打印结果!
相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码4 天前
别再前后端各写一套表单校验了
java·后端
伞伞悦读4 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
大勇前进4 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu4 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile4 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白804 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端