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()
}
/以上