Является ли hashCode перечисления scala одинаковым на разных JVM (spark)? - PullRequest
0 голосов
/ 10 ноября 2018

Я прочитал, что хорошей практикой для enum является scala:

Я намеренно расширяю класс с помощью Serializable для Spark.

sealed abstract class MyEnum(val nature: String) extends Serializable
case object A extends MyEnum("a")
case object B extends MyEnum("b")

Проблема в том, что я хочу, чтобыenum должен быть расширяемым другими , поэтому мне нужно удалить запечатанное ключевое слово, чтобы включить эту функцию

abstract class MyEnum(val nature: String) extends Serializable
case object A extends MyEnum("a")
case object B extends MyEnum("b")

В другом файле

import enumpackage.MyEnum
case object C extends MyEnum("c")

Зная это выпуск с перечислением Java на Spark, мне было интересно, как сгенерировать hashCode из объекта, расширяющего класс, который запечатан или нет.

Безопасно ли избегать запечатанного ключевого слова для моих целей или мне нужно его сохранить, почему?Если я должен оставить это, есть ли решение моей проблемы расширяемости.

1 Ответ

0 голосов
/ 10 ноября 2018

В языках программирования, особенно в Java и Scala, перечисления не расширяются пользователем, а только владельцем перечисления и, как правило, по уважительной причине, контролируют. Если вы избавляетесь от sealed, не считайте это перечислением, просто рассматривайте его, как любой другой класс с подклассами или подобъектами.

Что касается вашего hashCode. Вы получаете это автоматически с помощью case class или case object, так что вам больше ничего не нужно делать.

...