2017-02-28 17 views
1

値に基づいて列挙型を安全に取得したいと考えています。int値に基づいてEnumを安全に初期化する方法はありますか?

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

私が行う場合:

UserType(100) 

私はエラーを取得する:

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 

は、これを行うための型保証方法はありますか?

+1

'Fraid not;あなた自身で例外を処理したりラップする必要があります。 – Yawar

答えて

0

EnumのValueSetでfindを使用して、オプションを取得できます。値が存在しない場合は、None値を取得します(getOrElseを使用すると便利です)。

例:

UserType.values.find(_ == 100) 

私は実際にも、より良いタイプセーフ列挙型をモデル化する方法について説明しthis answerを読むためにあなたをお勧めします。

関連する問題