在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的区别相关推荐

  1. scala中val与def定义的区别

    scala中val与def定义的区别 变量 val定义一个不可改变的变量, def则是一个方法: //scala中定义: def main(args: Array[String]): Unit = { ...

  2. scala中json与case class对象的转换, spark读取es json转换成case class

    ilinux_one scala中json与对象的转换 遇到的问题 因为要把spark从es读出来的json数据转换为对象,开始想用case class定义类型,通过fastjson做转换.如下 复制 ...

  3. oracle中DECODE与CASE的用法区别

    对于CASE与DECODE其实并没有太多的区别,他们都是用来实现逻辑判断.Oracle的DECODE函数功能很强,灵活运用的话可以避免多次扫描,从而提高查询的性能.而CASE是9i以后提供的语法,这个 ...

  4. scala中object和class关键字的区别

  5. scala中case class与一般的class的区别

    (1)case class初始化的时候可以不用new,也可以加上,但是class必须加new (2)默认实现了equals.hashCode方法 (3)默认是可以序列化的,实现了Serializalb ...

  6. Scala class和case class的区别

    在Scala中存在case class,它其实就是一个普通的class.但是它又和普通的class略有区别,如下: 1.初始化的时候可以不用new,当然你也可以加上,普通类一定需要加new: scal ...

  7. 【视频】详解Scala中的类及与Java的详细区别

    详解Scala中的类及与Java的详细区别

  8. scala中case的用法

    scala中没有switch,但是有case,其case相当强大,有各种不同的匹配方式. 一.简单匹配,值匹配: 例 a: val bools = List(true, false) for (boo ...

  9. Scala中Unit、Nothing和Null之间的区别概述

    在Scala中,Unit.Nothing和Null是三个比较特殊的数据类型,三者之间的区别如下: Unit 类似于Java中的void,表示没有返回值,用于不返回任何结果的方法的结果类型. 只有一个实 ...

最新文章

  1. 使用poi读取公式错误,xlsx和xls在poi3.8后都支持公式读取,读取后有计算错误公式,解决方法
  2. c 多线程mysql_多线程读写mysql数据库
  3. 离散事件模拟在游戏中的应用
  4. ie浏览器升级_IE 被微软专家从浏览器里除名了,专家说它只是个兼容性解决方案...
  5. 宋利兵 mysql_《MySQL 5.7 Replication新特性》分享之互动问题解答
  6. USTC 2011 homework list [现代软件工程 作业]
  7. 作者:冯是聪(1973-),男,博士,北京明略软件系统有限公司联合创始人兼CTO。...
  8. leetcode 【 Sort Colors 】python 实现
  9. Struts2 标签
  10. 保存同一个H264视频流,第一个文件能播放,第二个播放不了。为什么
  11. 黄绿色——五色配色篇
  12. 计算机没有音频驱动程序,电脑没有声音怎么办?如何安装音频输出设备?
  13. 关于NRF24L01模块使用的部分个人总结
  14. android sqlite 示例,Android SQLite数据库操作示例
  15. genymotion报错an error occured while deploying the file解决办法
  16. mysql 复合索引 悲观锁_对MySQL索引、锁及事务的简单分析
  17. php 微信自动获取手机号
  18. java初学者必读-经验总结--经典!
  19. 名帖44 北魏 楷书《元苌墓志》
  20. 计算机应用基础中课程表怎么制作,浅谈《计算机应用基础》课程中Word表格的制作课程教学...

热门文章

  1. 请求https接口时报错:Caused by SSLError(SSLError(1, u‘[SSL: CERTIFICATE_VERIFY_FAILED] certificat,安装certifi
  2. 如何让一张图片填满整个页面
  3. pta 哥尼斯堡的“七桥问题”
  4. Spring的init-method和destory-method
  5. MinIO The access key ID you provided does not exist in our records
  6. Jeesite 4.0 学习笔记
  7. 遨博机械臂——末端工具ROS驱动
  8. Mac上安装mysql及密码重置
  9. iOS动画 Masonry约束弹框动画animateWithDuration:
  10. Appium: Windows系统桌面应用自动化测试(二)