Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
enum class
『enum class』は決まった値の集合を型として定義する列挙型です。『values()』『valueOf()』などで列挙子の一覧や取得が行えます。
構文
// 基本的な enum class
enum class 列挙型名 {
定数1, 定数2, 定数3
}
// プロパティを持つ enum class
enum class 列挙型名(val プロパティ名: 型) {
定数1(値), 定数2(値)
}
構文一覧
| 構文 / プロパティ | 概要 |
|---|---|
| 列挙型名.values() | すべての列挙子を配列で返します。 |
| 列挙型名.valueOf("名前") | 名前に一致する列挙子を返します。存在しない場合は例外が発生します。 |
| 列挙子.ordinal | 列挙子の宣言順インデックス(0始まり)を返します。 |
| 列挙子.name | 列挙子の名前を文字列で返します。 |
| enumValues<T>() | 型パラメーターで列挙子の配列を取得します。 |
| enumValueOf<T>("名前") | 型パラメーターで名前から列挙子を取得します。 |
サンプルコード
// 曜日を表す enum class
enum class DayOfWeek {
MON, TUE, WED, THU, FRI, SAT, SUN
}
// プロパティを持つ enum class
enum class Color(val code: String) {
RED("#FF0000"),
GREEN("#00FF00"),
BLUE("#0000FF")
}
fun main() {
// name と ordinal を確認します。
val day = DayOfWeek.WED
println(day.name) // WED
println(day.ordinal) // 2
// values() でループ処理します。
for (d in DayOfWeek.values()) {
println("${d.ordinal}: ${d.name}")
}
// valueOf() で名前から列挙子を取得します。
val c = Color.valueOf("BLUE")
println(c.code) // #0000FF
// when 式と組み合わせると便利です。
val msg = when (day) {
DayOfWeek.SAT, DayOfWeek.SUN -> "休日"
else -> "平日"
}
println(msg) // 平日
}
概要
『enum class』は定数の集合を型安全に扱うための仕組みです。すべての列挙子は自動的に『name』(宣言名の文字列)と『ordinal』(0始まりのインデックス)を持ちます。
コンストラクタにプロパティを定義すると、各列挙子に異なる値を持たせることができます。『valueOf()』に存在しない名前を渡すと『IllegalArgumentException』が発生するため、不明な文字列を変換する場合は『try-catch』や『enumValues()』でのフィルタリングを検討してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。