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

scala> case class Iteblog(name:String)

defined class Iteblog

scala> 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 = true

scala> iteblog.hashCode

res7: Int = 57880342

  4、默认是可以序列化的,也就是实现了Serializable ;

scala> class A

defined class A

scala> 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@4c257aef

scala> oos.writeObject(iteblog)

scala> val = new A

a: = $iwC$$iwC$A@71687b10

scala> 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 == =true

    case _ =false

  }

  val id = Fun("x", Var("x"))

  val = Fun("x", Fun("y", App(Var("x"), Var("y"))))

  printTerm(t)

  println

  println(isIdentityFun(id))

  println(isIdentityFun(t))

}

class与case class的区别(转载)相关推荐

  1. Scala class和case class的区别

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

  2. .NET 的 WCF 和 WebService 有什么区别?(转载)

    .NET 的 WCF 和 WebService 有什么区别?(转载) [0]问题: WCF与 Web Service的区别是什么? 和ASP.NET Web Service有什么关系? WCF与ASP ...

  3. postfix中recipient/client/sender/helo四者的区别转载

    postfix在main.cf中用下面四个做限制,那么这四者到底有什么区别? smtpd_recipient_restrictions smtpd_client_restrictions smtpd_ ...

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

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

  5. jquery和javascript的区别(转载自脚本之家)

    jquery 就对javascript的一个扩展,封装,就是让javascript更好用,更简单,为了说明区别,下面与大家分享下JavaScript 与JQuery 常用方法比较 jquery 就对j ...

  6. arm920T与arm926的区别[转载]

    ARM920(T)与ARM926(EJ-S)还是有不少区别的,粗的讲,前者基于ARMv4架构,后者基于ARM v5架构.其中,对于程序员来说,一个大的区别是,两者指令集不一样.926(ARM v5)新 ...

  7. php中this,self,parent三个关键字之间的区别(转载)

    PHP5是一具备了大部分面向对象语言的特性的语言,比PHP4有 了很多的面向对象的特性,但是有部分概念也比较难以理解,这里我主要谈的是 this,self,parent三个关键字之间的区别.从字面上比 ...

  8. varchar和Nvarchar区别 ----转载

    varchar和Nvarchar区别 Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示 如果还为了这个纠结,就直接看看后面的解 ...

  9. git fetch和git pull之间的区别--转载

    原文地址:http://blog.csdn.net/a19881029/article/details/42245955 git fetch和git pull都可以用来更新本地库,它们之间有什么区别呢 ...

最新文章

  1. 揭秘人工智能(系列):深度学习是否过分夸大?
  2. (转)Linux系统调用和库函数调用的区别
  3. 转:Linux实时将所有输出重定向到文件
  4. 多元函数概念思维导图_高等数学 多元函数微分学 知识技巧思维导图 [21考研上岸之旅]...
  5. Meta http-equiv属性详解
  6. 初了解JS设计模式,学习笔记
  7. bat(续五)-获取批处理文件所在路径
  8. 三星平板显示无法连接网络连接服务器,三星p600平板电脑无法连接无线网络该怎么办?...
  9. Unity3D休闲射击类游戏《Survival Shooter》完整源码
  10. 平面设计师怎么找素材?
  11. Python 内置模块tkinter —— 秒表计时器
  12. 大一新生必会的c语言五子棋!PVP,PVE,EVE模式都有,还有智能的AI部分,复盘等内容!一看就会的五子棋教程,确定不来看看吗?
  13. vue_按需引入elment、echarts和路由懒加载,减少打包体积
  14. 神经系统体格检查概要
  15. 计算机毕业设计java+ssm车辆租赁网站(源码+系统+mysql数据库+Lw文档)
  16. moviepy合成字幕
  17. JAVA EE开发环境准备
  18. 【动手学深度学习----注意力机制笔记】
  19. Python将图片彩色转化为素描
  20. 计算机学科教师职称答辩,教师职称论文答辩开场白及注意事项

热门文章

  1. 调用python 报R6034 错误
  2. Android-04:线程的使用
  3. postgresql如何实现group_concat功能
  4. 变,从南到北,从北到南...
  5. mysql导到相对位置_MySQL数据备份与恢复
  6. python多行注释符号_python知识学习,python标识符和关键字
  7. python列表元组字典相互转化_python中字典元组和列表的互相转化
  8. 模拟3个人排除买票,每人买1张票。售货员只有1张五元的钱,电影票5元一张
  9. Centos修改文件打开数限制
  10. 三维重建11:点云的全局特征和局部特征