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という名前にしたんだと思います… たぶん??