您的位置:首页 > 其它

scala class和case class的区别

2018-01-12 00:00 155 查看
scala中的case 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 a = 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、支持模式匹配;

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  scala