この記事で分かること
- enumの定義名から逆引きする方法
- enumの数値から逆引きする方法
この記事では、Kotlinのenum値を文字列や数値から逆引きする方法について解説しています。
DBに保存されたString型の文字列やInt型の数値から、enumの列挙値に戻す場合などを想定しています。
実装は簡単ですが、よく忘れてしまうので備忘録として記事に残します。
サンプルコード
列挙値のサンプル
enum class Animal(private val value: Int) {
DOG(1),
CAT(2),
TIGER(3),
LION(4),
MONKEY(5);
companion object {
fun lookup(value: Int): Animal {
return values().find { it.value == value } ?: throw IllegalArgumentException()
}
}
}
逆引きのコード
// enumの定義名から逆引き
val animal = Animal.valueOf("DOG")
// enumに割り当てられた数値から逆引き
val animal2 = Animal.lookup(5)
解説
上記のサンプルコードの内容を解説します。
enumの定義名(DOG, CATなど)から enumに戻す場合は追加の実装は必要ありません。
enum classを作成したときに自動的に作成される valueOf メソッドを使って、enumの値を逆引きすることが出来ます。
数値から enumに戻す場合は、少し追加の実装が必要です。
上記のコードでは、companion objectとして lookup というメソッドを定義しています。
lookup の処理では、valuesというenumに用意されているメソッドを使って目的の数値に合致するenum値を探します。(合致するものがない場合、例外が発生します)
まとめ
最後に、この記事の内容をまとめます。
要点まとめ
- enum の valueOf メソッドを使って文字列から逆引きすることが出来る
- enum の values メソッドを使って数値から逆引きすることが出来る
- valueOf と values は enum に元から用意されているメソッドである
小ネタ的ではありますが、実際の開発現場でも比較的よく出てくるパターンなのではないかと思います。
DBのO/Rマッパーやデシリアライザー等が、暗黙的にenumに変換してくれる場合もありますが、自分で実装する方法を知っておくことも大事だと思います。
今回の記事が役に立ちましたら、以下の「この記事は役に立ちましたか?」のボタンをぜひポチッとお願いします。(モチベーションになります!)