/ / Jak zainicjować Enum w oparciu o wartość int bezpiecznie? - scala

Jak bezpiecznie zainicjować Enum na podstawie wartości int? - scala

Chcę bezpiecznie móc uzyskać wyliczenie na podstawie wartości.

object UserType extends Enumeration {
type UserType = Value
val Anonymous, Member, Paid = Value
}

Jeśli zrobię:

UserType(100)

Pojawia się błąd:

java.util.NoSuchElementException: key not found: 100
at scala.collection.MapLike$class.default(MapLike.scala:228)
at scala.collection.AbstractMap.default(Map.scala:59)
at scala.collection.mutable.HashMap.apply(HashMap.scala:65)
at scala.Enumeration.apply(Enumeration.scala:114)
... 32 elided

Czy istnieje sposób, aby to zrobić?

Odpowiedzi:

0 dla odpowiedzi № 1

Możesz spróbować użyć find na ValueSet of Enum, a następnie uzyskać opcję. Jeśli ta wartość nie istnieje, otrzymasz wartość None (użycie getOrElse jest tu bardzo wygodne).

Przykład:

UserType.values.find(_ == 100)

Naprawdę poleciłbym również przeczytać ta odpowiedź to wyjaśnia, jak wymodelować bezpieczniejsze wyliczenia tego typu.