TwoClocks
07/23/2020, 11:34 PMnkiesel
07/23/2020, 11:51 PMenum class FieldType(override val value: Int) : SingleValueEnum {
INVALID(-1),
TEXTBOX(1),
DROPDOWN(3);
companion object : SingleValueEnumCompanion<FieldType>(values(), INVALID)
}
The helper code is pretty simple:
interface SingleValueEnum {
val value: Any
}
open class SingleValueEnumCompanion<T : SingleValueEnum>(elements: Array<T>, val invalid: T? = null) {
private val values = elements.associateBy { it.value }
private val names = elements.associateBy { it.toString() }
fun fromValue(value: Any) = values[value] ?: invalid ?: throw IllegalArgumentException("$value is invalid")
fun fromName(name: String) = names[name] ?: invalid ?: throw IllegalArgumentException("$name is invalid")
}
streetsofboston
07/23/2020, 11:51 PMTwoClocks
07/24/2020, 12:05 AMTobias Berger
07/24/2020, 9:54 PM