为什么要在Scala中扩展“可序列化”?

时间:2019-04-17 05:41:43

标签: java scala serialization deserialization

我正在研究Scala中的一些Sapark项目,并且看到所有对象都在扩展Serializable

就像:

object someName extends Serializable {
//some code
}

我了解到序列化通常用于存储或传递数据结构,以便可以将数据从序列化形式轻松地以原始形式加载到内存中。但是,在这种情况下,object更像是Java类。那么,扩展Serializable有什么意义或优势?你什么时候做的?总是需要这样做吗?

3 个答案:

答案 0 :(得分:2)

仅在使用对象时真正需要它,而不是直接在对象上调用方法。例如。像

val x = someName

rdd.map { ... x ... }

object SomeName extends Serializable, SomeTrait { ... }

def f(x: SomeTrait) = ...

rdd.map { ... f(SomeName) ... }

对于不扩展任何类/特征的“全局” object来说,这基本上是没有用的,因为没有人执行第一个摘要所示的内容,但也没有任何伤害。请注意,NilNone是第二个示例,它们确实扩展了Serializable(即使没有Spark)。

答案 1 :(得分:1)

在scala中,对象不是Java类,而是Java单例类,如果其内容需要通过网络发送,或者它们想写入文件,则它们类似于Java类。因此,它具有可序列化特征。

答案 2 :(得分:1)

case 对象和 case 类自动扩展ProductSerializable。有时由于类型推断的原因,使得ADT层次结构中的特征和抽象类扩展了ProductSerializable

https://typelevel.org/blog/2018/05/09/product-with-serializable.html