Kotlinで逆引きできるEnumの実装

Enumをコード値から逆引きして作成したい状況はよくあるかと思います。
例えばDBの値とEnumのコード値が紐づいているときなどでしょうか。

実装方法

以下のようなcompanion objectを作成することで実装できます。

呼び出し方

解説

JavaではEnum内にStaticメソッドを定義する方法をよく目にしますが、KotlinではStaticメソッドを宣言できない仕様となっています。
そのため、代替案としてcompanion objectを作成し、そのobjectのメソッドとして逆引き処理を実装しています。
ちなみにvalues()はKotlinのEnumに標準で備わっているメソッドです。

companion objectとは

class内で生成されるSingletonになります。
Kotlinではオブジェクトの宣言(object hoge)をすることでSingletonを生成することができます。
さらにコンパニオンとして定義(companion object hoge)することでオブジェクト呼び出しを省略できます。

詳しくは以下を参照してください。
参考:コンパニオンオブジェクト (Companion Objects)

注意点

あまりないパターンかもしれませんが、上記EnumをJavaで呼び出したいときには@JvmStaticをgetAnimalByDbParamに付与したほうが安全です。
付与しなかった場合には、Java側で呼び出す際「Animal.Companion.getAnimalByDbParam()」と記述する必要がある(=Companionオブジェクトの呼び出しを省略することが不可能となる)ためです。

 

システム開発のご相談はこちらからお気軽にお問合せください。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です