【Kotlin/Android】enum class(列挙型)の使い方!全ての値を配列で取得
この記事からわかること
- Androidアプリ開発:Kotlinの構文
- enum classの宣言方法や使い方
- 列挙型とは
- 全ての値を配列で取得する方法
- メソッドを定義する方法
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
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
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。