印度朋友手把手教你学Scala(10):Scala里的样本对象

本文介绍了Scala中的Case Object特性,对比了其与普通对象的区别,强调了Case Object在模式匹配和序列化方面的优势。
/**
 * 谨献给我最爱的YoYo 
 * 原文出处:https://madusudanan.com/blog/scala-tutorials-part-10-case-objects-in-scala/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-14
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

样本对象

我们已经学习了对象样本类。样本对象是这两者的合体,即它是一个类似对象的单例并且有在样本类中大量的和大量的样板。唯一的区别是,样板是为一个对象而不是一个类完成的。

这是关于Scala系列教程的第十章。点击这里可查看整个系列。

目录

  • 简介
  • 样本对象和样本类
  • 样本对象的优势
  • 结论

简介

如果你需要针对样本类的样板,样本对象是非常有用的。

它们可以这样创建。

case object CaseObjectDemo {

  println("I am a case object")

}

当你将一个样本对象和一个样本的反编译版本类进行比较,你将能够看到两者之间的差异。

样本对象和样本类

在样本对象中缺少以下东西。

  • applyunapply方法。我们稍后会看到这个
  • 因为它是一个单例,所以没有复制方法
  • 没有结构相等比较的方法
  • 也没有构造函数

与样本类相比,缺少的这些部分是实际上是不需要的。

样本对象的优势

与普通object相比,我们可以清楚地看到,反编译类中生成什么。

  • toString方法
  • 基于Murmur哈希hashCode方法
  • 样本对象/样本类默认是可序列化的

我们可以通过以下代码示例来验证它是可Serializable的。

  // 将会打印false
  println(SerializationExample.isInstanceOf[Serializable])
  // 将会打印true
  println(CaseObjectSerializationExample.isInstanceOf[Serializable])

object SerializationExample {

}

case object CaseObjectSerializationExample {

}

如果我们使用普通的object,让它变得可序列化,那么它可以扩展特质Serializable

  // 将会打印true,因为它扩展了特质Serializable
  println(SerializationExample.isInstanceOf[Serializable])
  // 将会打印true
  println(CaseObjectSerializationExample.isInstanceOf[Serializable])

object SerializationExample extends Serializable{

}

case object CaseObjectSerializationExample {

}

结论

我们已经到了文章的结尾。这是一个相当短的,我们看到有一个叫做样本对象的东西,以及为什么它会存在。

当与其对应的样本类比较时,样本对象提供的普通对象的语法糖会成为一个争论。乍一看,他们似乎没有太多的优势,但实际上有很多。

在下面的教程中,我们将看到尊对象的用法,其中语法糖实际上变成良好的可读代码,特别是在这两种情况下:

1)当可以使用样本类和样本对象进行模式匹配时

2)在Scala中使用样本对象作为枚举的基本结构

这些是学习各种函数式编程概念所必备的高级主题。我们会一个个征服他们。

敬请关注!^_^


------------------------ 

转载于:https://my.oschina.net/dogstar/blog/864206

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值