class、case class、object、case object的区别
2023-02-18 16:41:44 时间
scala记录
对于一般的class,是这样写的:
class Test1(var name: String, var age: Int){
def method():Unit
private var id
}
而对于case class,形式如下:
class Test2(name: String, age: Int)
case class的成员默认都是常量,所以case class适用于数据成员不改变的场景,而且case class之间可以进行比较
case class Message(sender: String, recipient: String, body: String)
val message2 = Message("jorge@catalonia.es", "guillaume@quebec.ca", "Com va?")
val message3 = Message("jorge@catalonia.es", "guillaume@quebec.ca", "Com va?")
val messagesAreTheSame = message2 == message3 // true
尽管message2和message3引用不同的对象,但是他们的值是相等的,所以message2 == message3为true。
case class也很适合做匹配,以下是做类型匹配:
abstract class Notification
case class Email(sender: String, title: String, body: String) extends Notification
case class SMS(caller: String, message: String) extends Notification
case class VoiceRecording(contactName: String, link: String) extends Notification
class Main{
def showNotification(notification: Notification): String = {
notification match {
case Email(sender, title, _) =>
s"You got an email from $sender with title: $title"
case SMS(number, message) =>
s"You got an SMS from $number! Message: $message"
case VoiceRecording(name, link) =>
s"you received a Voice Recording from $name! Click the link to hear it: $link"
}
}
}
一般的object,形式如下:
object Car{
val numberOfWheels = 4
def run(): Unit = {
val currentDateAndTime: Date = new Date(System.currentTimeMillis())
println(s"I am a new car running on $currentDateAndTime!")
}
}
object对象是单例对象,和class不同的是,object是无参的,构造函数不能传入参数
而case object和object的区别主要有:
- case object添加了默认可序列化方法,转化为文本或者二进制数据,而object需要extends Serializable
- case object支持模式匹配
- case object支持枚举
- case object添加了默认toString方法
相关文章
- LeetCode - #68 文本左右对齐
- LeetCode - #69 x 的平方根
- 带你掌握java反序列化漏洞及其检测
- 这几种Java异常处理方法,你会吗?
- 教你用Java7的Fork/Join框架开发高并发程序
- Java变异出现错误:No enclosing instance of type XXX is accessible
- LeetCode - #70 爬楼梯(Top 100)
- LeetCode - #71 简化路径
- LeetCode - #72 编辑距离(Top 100)
- LeetCode - #73 矩阵置零
- LeetCode - #74 搜索二维矩阵
- [Maven进阶]聚合和继承
- Ichunqiu云境 - Delegation Writeup
- 在搭载 M1 及 M2 芯片 MacBook 设备上玩 Stable Diffusion 模型
- 在 Ubuntu 上安装 Discourse 开发环境
- 用户重复注册分析-多线程事务中加锁引发的bug
- 基于51单片机的简易抢答器
- 设计分享|74HC154译码器实现流水灯
- adobe photoshop软件2023最新版下载安装
- Photoshop2023最新完美版一键式安装教程