В частности, используя новое ключевое слово 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 ( учет производительности).
Производительность? См. ссылку после ссылки на Enumeratum?
Я имею в виду просто используйте BitSet
и IntMap
Я думаю, вы упомянули почти все подходы, кроме использования самих 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
Что конкретно вы ищете в
EnumSet
иEnumMap
? Что не так с обычнымSet
илиMap
?