Scala class和case class的区别

来源:互联网 发布:如何做淘宝详情页 编辑:程序博客网 时间:2024/05/16 14:41

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

scala> caseclass Iteblog(name:String)
defined classIteblog
 
scala> valiteblog = Iteblog("iteblog_hadoop")
iteblog:Iteblog = Iteblog(iteblog_hadoop)
 
scala> valiteblog = new Iteblog("iteblog_hadoop")
iteblog:Iteblog = Iteblog(iteblog_hadoop)

  2、toString的实现更漂亮;

scala> iteblog
res5:Iteblog = Iteblog(iteblog_hadoop)

  3、默认实现了equals 和hashCode;

scala> valiteblog2 = Iteblog("iteblog_hadoop")
iteblog2:Iteblog = Iteblog(iteblog_hadoop)
 
scala> iteblog == iteblog2
res6:Boolean = true
 
scala> iteblog.hashCode
res7:Int = 57880342

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

scala> classA
defined classA
 
scala> importjava.io._
import java.io._
 
scala> valbos = new ByteArrayOutputStream
bos:java.io.ByteArrayOutputStream =
 
scala> valoos = new ObjectOutputStream(bos)
oos:java.io.ObjectOutputStream =java.io.ObjectOutputStream@4c257aef
 
scala> oos.writeObject(iteblog)
 
scala> vala = new A
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 {
  defprintTerm(term:Term) {
    termmatch {
      caseVar(n) =>
        print(n)
      caseFun(x, b) =>
        print("^"+ x + ".")
        printTerm(b)
      caseApp(f, v) =>
        print("(")
        printTerm(f)
        print(" ")
        printTerm(v)
        print(")")
    }
  }
  defisIdentityFun(term:Term): Boolean = termmatch {
    caseFun(x, Var(y)) ifx == y => true
    case_ =>false
  }
  valid = Fun("x", Var("x"))
  valt = Fun("x", Fun("y", App(Var("x"), Var("y"))))
  printTerm(t)
  println
  println(isIdentityFun(id))
  println(isIdentityFun(t))
}
优秀人才不缺工作机会,只缺适合自己的好机会。但是他们往往没有精力从海量机会中找到最适合的那个。
100offer 会对平台上的人才和企业进行严格筛选,让「最好的人才」和「最好的公司」相遇。
注册 100offer,谈谈你对下一份工作的期待。一周内,收到 5-10 个满足你要求的好机会!
本博客文章除特别声明,全部都是原创!
禁止个人和公司转载本文、谢谢理解:过往记忆(https://www.iteblog.com/)
本文链接: 【Scala class和case class的区别】(https://www.iteblog.com/archives/1508.html)
喜欢 (41)
分享 (0)