Kotlin / Programming

Enumのentriesについて

enum class ABC(
    val testValue1: String,
    val testValue2: String,
    val testValue3: String,
) {
    AAA(
        testValue1 = "AAA1",
        testValue2 = "AAA2",
        testValue3 = "AAA3",
    ),
    BBB(
        testValue1 = "BBB1",
        testValue2 = "BBB2",
        testValue3 = "BBB3",
    ),
    CCC(
        testValue1 = "CCC1",
        testValue2 = "CCC2",
        testValue3 = "CCC3",
    ),
}

fun main() {
    val aaa = ABC.entries
}

こんなコードに出会って、Enum.entriesを初めて知ったのでまとめました

リファレンスには、「EnumEntriesインターフェースとは、Enumエントリー(Enum entries)を含む、Listインターフェースの特殊で不変な実装」とあります
下記がオリジナルのコードになります

※Enumエントリー(Enum entries)については最下部に記述

public sealed interface EnumEntries<E : Enum<E>> : List<E>

これを見るに、Enum用のListっぽいです

使い方と参照方法はこんな感じです(Kotlin Playground)

enum class ABC(
    val testValue1: String,
    val testValue2: String,
    val testValue3: String,
) {
    AAA(
        testValue1 = "AAA1",
        testValue2 = "AAA2",
        testValue3 = "AAA3",
    ),
    BBB(
        testValue1 = "BBB1",
        testValue2 = "BBB2",
        testValue3 = "BBB3",
    ),
    CCC(
        testValue1 = "CCC1",
        testValue2 = "CCC2",
        testValue3 = "CCC3",
    ),
}

fun main() {
    val entries = ABC.entries
    println(entries) // [AAA, BBB, CCC]
    
    println("--------------")
    
    for (entry in entries) {
        println("entry.testValue1: ${entry.testValue1}") // 各要素のtestValue1
        println("entry.testValue2: ${entry.testValue2}") // 各要素のtestValue2
        println("entry.testValue3: ${entry.testValue3}") // 各要素のtestValue3
        println("--------------")
    }
}

「Enum.entriesで取得できるEnumEntriesインターフェースが提供するcontainsやindexOfなどの操作は、ArrayList<Enum型>で同じ操作をするよりも早く処理ができます」とリファレンスのImplementation noteに書かれています

思ったこと

ABC.AAAのように、Enumの要素を参照する「Enum名.要素名」という記述をEnumエントリーと呼ぶのだと思います
そのエントリーのすべてを返すため、entryの複数形であるentriesという名前にしたんだと思います… たぶん??

コメントを残す

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