Scala中 class和case class的区别
在Scala中存在case class,它其实就是一个普通的class。但是它又和普通的class略有区别,如下:
1、初始化的时候可以不用new,当然你也可以加上,普通类一定需要加new;
scala> case class Iteblog(name:String)
defined class Iteblogscala> val iteblog = Iteblog("iteblog_hadoop")
iteblog: Iteblog = Iteblog(iteblog_hadoop)scala> val iteblog = new Iteblog("iteblog_hadoop")
iteblog: Iteblog = Iteblog(iteblog_hadoop)
2、toString的实现更漂亮;
scala> iteblog
res5: Iteblog = Iteblog(iteblog_hadoop)
3、默认实现了equals 和hashCode;
scala> val iteblog2 = Iteblog("iteblog_hadoop")
iteblog2: Iteblog = Iteblog(iteblog_hadoop)scala> iteblog == iteblog2
res6: Boolean = truescala> iteblog.hashCode
res7: Int = 57880342
4、默认是可以序列化的,也就是实现了Serializable ;
scala> class A
defined class Ascala> import java.io._
import java.io._scala> val bos = new ByteArrayOutputStream
bos: java.io.ByteArrayOutputStream =scala> val oos = new ObjectOutputStream(bos)
oos: java.io.ObjectOutputStream = java.io.ObjectOutputStream@4c257aefscala> oos.writeObject(iteblog)scala> val a = new A
a: A = $iwC$$iwC$A@71687b10scala> oos.writeObject(a)
java.io.NotSerializableException: $iwC$$iwC$A
5、自动从scala.Product中继承一些函数;
6、case class构造函数的参数是public级别的,我们可以直接访问;
scala> iteblog.name
res11: String = iteblog_hadoop
7、支持模式匹配;
其实感觉case class最重要的特性应该就是支持模式匹配。这也是我们定义case class的唯一理由,难怪Scala官方也说:It makes only sense to define case classes if pattern matching is used to decompose data structures. 。来看下面的例子:
object TermTest extends scala.App {def printTerm(term: Term) {term match {case Var(n) =>print(n)case Fun(x, b) =>print("^" + x + ".")printTerm(b)case App(f, v) =>print("(")printTerm(f)print(" ")printTerm(v)print(")")}}def isIdentityFun(term: Term): Boolean = term match {case Fun(x, Var(y)) if x == y => truecase _ => false}val id = Fun("x", Var("x"))val t = Fun("x", Fun("y", App(Var("x"), Var("y"))))printTerm(t)printlnprintln(isIdentityFun(id))println(isIdentityFun(t))
}
Scala中 class和case class的区别相关推荐
- scala中val与def定义的区别
scala中val与def定义的区别 变量 val定义一个不可改变的变量, def则是一个方法: //scala中定义: def main(args: Array[String]): Unit = { ...
- scala中json与case class对象的转换, spark读取es json转换成case class
ilinux_one scala中json与对象的转换 遇到的问题 因为要把spark从es读出来的json数据转换为对象,开始想用case class定义类型,通过fastjson做转换.如下 复制 ...
- oracle中DECODE与CASE的用法区别
对于CASE与DECODE其实并没有太多的区别,他们都是用来实现逻辑判断.Oracle的DECODE函数功能很强,灵活运用的话可以避免多次扫描,从而提高查询的性能.而CASE是9i以后提供的语法,这个 ...
- scala中object和class关键字的区别
- scala中case class与一般的class的区别
(1)case class初始化的时候可以不用new,也可以加上,但是class必须加new (2)默认实现了equals.hashCode方法 (3)默认是可以序列化的,实现了Serializalb ...
- Scala class和case class的区别
在Scala中存在case class,它其实就是一个普通的class.但是它又和普通的class略有区别,如下: 1.初始化的时候可以不用new,当然你也可以加上,普通类一定需要加new: scal ...
- 【视频】详解Scala中的类及与Java的详细区别
详解Scala中的类及与Java的详细区别
- scala中case的用法
scala中没有switch,但是有case,其case相当强大,有各种不同的匹配方式. 一.简单匹配,值匹配: 例 a: val bools = List(true, false) for (boo ...
- Scala中Unit、Nothing和Null之间的区别概述
在Scala中,Unit.Nothing和Null是三个比较特殊的数据类型,三者之间的区别如下: Unit 类似于Java中的void,表示没有返回值,用于不返回任何结果的方法的结果类型. 只有一个实 ...
最新文章
- 使用poi读取公式错误,xlsx和xls在poi3.8后都支持公式读取,读取后有计算错误公式,解决方法
- c 多线程mysql_多线程读写mysql数据库
- 离散事件模拟在游戏中的应用
- ie浏览器升级_IE 被微软专家从浏览器里除名了,专家说它只是个兼容性解决方案...
- 宋利兵 mysql_《MySQL 5.7 Replication新特性》分享之互动问题解答
- USTC 2011 homework list [现代软件工程 作业]
- 作者:冯是聪(1973-),男,博士,北京明略软件系统有限公司联合创始人兼CTO。...
- leetcode 【 Sort Colors 】python 实现
- Struts2 标签
- 保存同一个H264视频流,第一个文件能播放,第二个播放不了。为什么
- 黄绿色——五色配色篇
- 计算机没有音频驱动程序,电脑没有声音怎么办?如何安装音频输出设备?
- 关于NRF24L01模块使用的部分个人总结
- android sqlite 示例,Android SQLite数据库操作示例
- genymotion报错an error occured while deploying the file解决办法
- mysql 复合索引 悲观锁_对MySQL索引、锁及事务的简单分析
- php 微信自动获取手机号
- java初学者必读-经验总结--经典!
- 名帖44 北魏 楷书《元苌墓志》
- 计算机应用基础中课程表怎么制作,浅谈《计算机应用基础》课程中Word表格的制作课程教学...
热门文章
- 请求https接口时报错:Caused by SSLError(SSLError(1, u‘[SSL: CERTIFICATE_VERIFY_FAILED] certificat,安装certifi
- 如何让一张图片填满整个页面
- pta 哥尼斯堡的“七桥问题”
- Spring的init-method和destory-method
- MinIO The access key ID you provided does not exist in our records
- Jeesite 4.0 学习笔记
- 遨博机械臂——末端工具ROS驱动
- Mac上安装mysql及密码重置
- iOS动画 Masonry约束弹框动画animateWithDuration:
- Appium: Windows系统桌面应用自动化测试(二)