【问题标题】:Why do you extend Serializable in Scala?为什么要在 Scala 中扩展 Serializable?
【发布时间】:2019-09-07 06:58:54
【问题描述】:

我在 Scala 中浏览了一些 Sapark 项目,我发现所有对象都在扩展 Serializable

就像:

object someName extends Serializable {
//some code
}

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

【问题讨论】:

    标签: java scala serialization deserialization


    【解决方案1】:

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

    val x = someName
    
    rdd.map { ... x ... }
    

    object SomeName extends Serializable, SomeTrait { ... }
    
    def f(x: SomeTrait) = ...
    
    rdd.map { ... f(SomeName) ... }
    

    对于“全球”objects 没有扩展任何类/特征,它基本上是无用的,因为没有人做过第一个 sn-p 显示的内容,但它也没有伤害。请注意,NilNone 是第二个示例,它们确实扩展了 Serializable(即使没有 Spark)。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        scala 中的对象不像 java 类,它们就像 java 单例类,如果它的内容需要通过网络发送或者他们想写入文件。所以它已经扩展了 Serializable trait。

        【讨论】:

          猜你喜欢
          • 2010-10-10
          • 1970-01-01
          • 1970-01-01
          • 2011-09-20
          • 2021-06-09
          • 2010-09-15
          • 2013-05-01
          • 2017-01-19
          • 2018-03-11
          相关资源
          最近更新 更多