Существуют ли конкретные перечисления Scala 3, эквивалентные Java EnumSet/EnumMap?

В частности, используя новое ключевое слово enum, предоставленное Scala 3...

enum Translation(val bit: Byte):
   case FlipX extends Translation(1)
   case FlipY extends Translation(2)
   case RotateClockwise extends Translation(4) //90 degrees

...Каковы варианты идиоматического стиля Scala 3 для достижения эквивалента Java java.util.EnumSet и java.util.EnumMap?

Я категорически исключаю любые подходы в стиле Scala 2 , включая Enumeratum ( учет производительности).

Что конкретно вы ищете в EnumSet и EnumMap? Что не так с обычным Set или Map?

Gaël J 19.05.2024 21:27

Производительность? См. ссылку после ссылки на Enumeratum?

chaotic3quilibrium 19.05.2024 21:37

Я имею в виду просто используйте BitSet и IntMap

Luis Miguel Mejía Suárez 19.05.2024 22:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, вы упомянули почти все подходы, кроме использования самих Java java.util.EnumSet и java.util.EnumMap. В новой Scala 3 вы можете легко определить перечисления, совместимые с Java, расширив java.lang.Enum.

enum Translation(bit: Byte) extends java.lang.Enum[Translation] {
  case FlipX extends Translation(1)
  case FlipY extends Translation(2)
  case RotateClockwise extends Translation(4) // 90 degrees
}

object Translation {
  val translations = util.EnumSet.of(Translation.FlipX, Translation.RotateClockwise)
}

Но в целом обычно используются подходы, которые вы упоминаете в вопросе, или просто набор или карта. Кроме того, помощники, определенные в самом перечислении, охватывают большинство случаев:

Translation.values // all enum values
Translation.fromOrdinal(1) // by byte
Translation.valueOf("FlipX") // by name

Скасти этого ответа: scastie.scala-lang.org/Lu8UtokFTKmcBsoBLTTZtQ

chaotic3quilibrium 27.05.2024 17:01

Другие вопросы по теме