LoginSignup
6
4

More than 3 years have passed since last update.

【Java】【Kotlin】Enum の valueOf と values をジェネリックに呼び出す

Last updated at Posted at 2020-09-19

Enum 派生クラスに暗黙的に宣言されるメソッド/メンバ関数である valueOf および values
ジェネリックに呼び出す方法。

Java

次のような enum 型が定義されているとする。

public enum PrimaryColor {
    RED, GREEN, BLUE
}

具象型が分かっているときの呼び出し

public static void main(String... args) {
    PrimaryColor red = PrimaryColor.valueOf("RED"); // RED
    PrimaryColor[] values = PrimaryColor.values(); // [RED, GREEN, BLUE]
}

ジェネリックな呼び出し

public static <E extends Enum<E>> E valueOf(Class<E> enumType, String name) {
    return Enum.valueOf(enumType, name);
}

public static <E extends Enum<E>> E[] values(Class<E> enumType) {
    return enumType.getEnumConstants();
}

public static void main(String... args) {
    PrimaryColor red = valueOf(PrimaryColor.class, "RED"); // RED
    PrimaryColor[] values = values(PrimaryColor.class); // [RED, GREEN, BLUE]
}

Kotlin

次のような enum 型が定義されているとする。

enum class PrimaryColor {
    RED, GREEN, BLUE
}

具象型が分かっているときの呼び出し

fun main() {
    val red: PrimaryColor = PrimaryColor.valueOf("RED") // RED
    val values: Array<PrimaryColor> = PrimaryColor.values() // [RED, GREEN, BLUE]
}

ジェネリックな呼び出し

inline fun <reified E : Enum<E>> valueOf(name: String): E =
    enumValueOf<E>(name) // `<E>` は今回の場合は省略(型推論)可能

inline fun <reified E : Enum<E>> values(): Array<E> =
    enumValues<E>() // `<E>` は今回の場合は省略(型推論)可能

fun main() {
    val red: PrimaryColor = valueOf("RED")
    val values: Array<PrimaryColor> = values()
}

/以上

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4