【Kotlin/Android】enum class(列挙型)の使い方!全ての値を配列で取得

【Kotlin/Android】enum class(列挙型)の使い方!全ての値を配列で取得

この記事からわかること

  • Androidアプリ開発Kotlin構文
  • enum class宣言方法や使い方
  • 列挙型とは
  • 全ての値配列取得する方法
  • メソッド定義する方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

参考文献:公式リファレンス:enum classes

環境

Kotlinのenum classes(列挙型クラス)とは?

Kotlinの列挙型クラスは値を集合として名前をつけて管理することができるクラスです。enum classを使って定義し、型名は任意の名前を指定することができます。型名の最初の文字は大文字にすることが推奨されています。

enum class Lang {
    KOTLIN,
    SWIFT,
    DART
}

中には複数の列挙子を,(カンマ)区切りで宣言していきます。また列挙子は全て大文字で定義することが多いです。以下のようにつなげてもOKです。

enum class Lang {
    KOTLIN,SWIFT,DART
}

コンストラクタで引数を持たせる

列挙型クラスにはコンストラクタを持たせて引数をしてすることができます。

enum class Lang(val id:Int) {
    KOTLIN(0),
    SWIFT(1),
    DART(2)
}

定義した値を取得する

定義した値は列挙型クラス.列挙子または列挙型クラス.列挙子.nameの形式で取得することができます。

Lang.KOTLIN // KOTLIN
Lang.KOTLIN.name // KOTLIN

引数を持たせていた場合では列挙型クラス.列挙子.引数名で以下のように参照することができます。

Lang.KOTLIN // KOTLIN
Lang.KOTLIN.id // 0

全ての値を配列で取得する

Kotlinの列挙型クラスには自動で全ての要素を含んだ配列を取得するvaluesメソッドが用意されています。

Lang.values().forEach {
        print(it.name) // KOTLINSWIFTDART
}

メソッドを定義する

列挙型にはabstractを使って抽象メソッドを用意し、各列挙子にそれぞれ処理を持たせることも可能です。その際は列挙子の定義とメソッドの定義の区切りに;を付与します。

enum class Lang {
    KOTLIN {
        override fun message():String = "Android"
    },
    SWIFT{
        override fun message():String = "iOS"
    },
    DART{
        override fun message():String = "Android & iOS"
    };
    abstract fun message(): String
}
Lang.values().forEach {
    print(it.message()) // AndroidiOSAndroid & iOS
}

valueOfで名前から列挙子を取得する

valueOf(String)メソッドを使用することで引数に渡した文字列に一致する列挙型のオブジェクトを返します。

Lang.valueOf("KOTLIN")

存在しない文字列が渡された時にはIllegalArgumentException型の例外をスローします。

Lang.valueOf("PHP")
// Exception in thread "main" java.lang.IllegalArgumentException: No enum constant Lang.PHP

そのため使用する際はtryで例外をキャッチしてアプリがクラッシュしないように使用します。

try {
    val lang = Lang.valueOf("KOTLIN")
} catch (e: IllegalArgumentException) {
    // 指定された名前の列挙型が存在しない場合の処理
    val lang = Lang.DEFAULT
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index