Kotlin

【Kotlin】enumの列挙値を逆引きする方法 [valueOf]

この記事で分かること

  • 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に変換してくれる場合もありますが、自分で実装する方法を知っておくことも大事だと思います。

今回の記事が役に立ちましたら、以下の「この記事は役に立ちましたか?」のボタンをぜひポチッとお願いします。(モチベーションになります!)

この記事は役に立ちましたか?

  • この記事を書いた人
アバター画像

ゴイチ

ソフトウェアエンジニア歴20年。 C/C++, C#, Java, Kotlinが得意で、組込系・スマホ・大規模なWebサービスなど幅広いプログラミング経験があります。 現在は某SNSの会社でWebエンジニアをしています。

-Kotlin
-, , ,