Почему вы расширяете Serializable в Scala? - PullRequest
1 голос
/ 17 апреля 2019

Я прохожу несколько проектов Sapark в Scala и вижу, что все объекты расширяются Serializable.

Это как:

object someName extends Serializable {
//some code
}

Я понимаю, что сериализация часто используется для хранения или передачи структур данных, так что данные могут быть легко загружены в память в исходной форме, из сериализованной формы. Однако в этом случае object больше похож на класс Java. Итак, в чем смысл или преимущество расширения Serializable? Когда ты это делаешь? Нужно ли это всегда делать?

Ответы [ 3 ]

2 голосов
/ 17 апреля 2019

Это на самом деле нужно, только когда используются объекты , кроме вызова методов непосредственно для них .Например, что-то вроде

val x = someName

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

или

object SomeName extends Serializable, SomeTrait { ... }

def f(x: SomeTrait) = ...

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

Для "глобальных" object s, не расширяющих какие-либо классы / черты, это в основном бесполезно, потому что никто никогда не делает то, что показывает первый фрагмент,но это тоже не повредит.Обратите внимание, что Nil и None являются примерами второго и они расширяют Serializable (даже без Spark).

1 голос
/ 17 апреля 2019

case объекты и case классы расширяются Product и Serializable автоматически. Иногда черты и абстрактные классы из иерархии ADT расширяются до Product и Serializable по причинам вывода типа.

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

1 голос
/ 17 апреля 2019

В Scala объекты не похожи на класс java, они похожи на одноэлементный класс java, если его содержимое необходимо было отправить по сети или они хотели записать в файл. Так что он был расширен с сериализуемой чертой.

...