bod
02/14/2019, 12:44 PMenum class MyEnum(val key: String) {
FOO("foo"),
BAR("bar"),
UNKNOWN("unknown");
companion object {
fun getByKey(key: String?): MyEnum {
return MyEnum.values().firstOrNull { it.key == key } ?: MyEnum.UNKNOWN
}
}
}
I’m looking for a way to not repeat this companion object for all our enums. Possibly a combination of an interface and a generic extension function? Any idea? 🙂
[sorry I already posted this before to an unrelated channel by mistake]olonho
02/14/2019, 1:08 PMbod
02/14/2019, 2:02 PMnull
and UNKNOWN
mean different thingsmarstran
02/14/2019, 2:02 PMinterface EnumCompanion<T, K> {
fun T.key(): K
val default: T
}
inline fun <reified T : Enum<T>, R> EnumCompanion<T, R>.getByKey(key: R): T {
return enumValues<T>().find { it.key() == key } ?: default
}
enum class MyEnum(val key: String) {
FOO("foo"),
BAR("bar"),
UNKNOWN("unknown");
companion object : EnumCompanion<MyEnum, String> {
override fun MyEnum.key() = key
override val default = UNKNOWN
}
}
bod
02/14/2019, 2:03 PM