scala class和case class的区别

scala中的case class和普通class的区别以下:java

一、初始化的时候能够不用new,固然你也能够加上,普通类必定须要加new;es6

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)

二、toString的实现更漂亮;app

scala> iteblog
res5: Iteblog = Iteblog(iteblog_hadoop)

三、默认实现了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

四、默认是能够序列化的,也就是实现了Serializable ;oop

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 a = new A
a: A = $iwC$$iwC$A@71687b10
 
scala> oos.writeObject(a)
java.io.NotSerializableException: $iwC$$iwC$A

五、自动从scala.Product中继承一些函数;
六、case class构造函数的参数是public级别的,咱们能够直接访问;es5

scala> iteblog.name
res11: String = iteblog_hadoop

七、支持模式匹配;scala

scala> case class A( a: Int )
defined class A

scala> case class B( b: String )
defined class B

scala> def classMath( x: AnyRef ): Unit = {
     |   x match {
     |     case A(a) => println( "A:" + a )
     |     case B(b) => println( "B:" + b )
     |     case A => println( A.apply(100) )
     |   }
     | }
classMath: (x: AnyRef)Unit

scala> val a = A( 1 )
a: A = A(1)

scala> val b = B( "b" )
b: B = B(b)

scala> classMath( a )
A:1

scala> classMath( b )
B:b
相关文章
相关标签/搜索