axe*_*l22 135
这是一个区别 - 案例对象扩展了Serializable特征,因此它们可以被序列化.默认情况下,常规对象不能:
scala> object A
defined module A
scala> case object B
defined module B
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@e7da60
scala> oos.writeObject(B)
scala> oos.writeObject(A)
java.io.NotSerializableException: A$
Run Code Online (Sandbox Code Playgroud)
Dav*_*ith 106
案例类与常规类的不同之处在于:
equals和hashCodetoString,和scala.Product. 模式匹配,equals和hashCode对于单身人士来说并不重要(除非你做了一些真正退化的事情),所以你几乎只是获得序列化,一个不错的toString,以及你可能永远不会使用的一些方法.
Min*_*Shi 34
scala> object foo
Run Code Online (Sandbox Code Playgroud)
定义了对象foo
scala> case object foocase
Run Code Online (Sandbox Code Playgroud)
定义对象foocase
序列化差异:
scala> foo.asInstanceOf[Serializable]
Run Code Online (Sandbox Code Playgroud)
java.lang.ClassCastException:foo $无法转换为scala.Serializable
... 43省略
scala> foocase.asInstanceOf[Serializable]
Run Code Online (Sandbox Code Playgroud)
res1:Serializable = foocase
toString的区别:
scala> foo
Run Code Online (Sandbox Code Playgroud)
res2:foo.type = foo $ @ 7bf0bac8
scala> foocase
Run Code Online (Sandbox Code Playgroud)
res3:foocase.type = foocase
| 归档时间: |
|
| 查看次数: |
51094 次 |
| 最近记录: |