Это может быть жизнеспособной реализацией. Отобразите все перечисления с их типами в String
и сохраните их как собственность. Затем просто воспользуйтесь сравнением строк, чтобы найти входные данные поиска:
enum class Test(val type: List<String>) {
A(listOf("aa", "ab", "ac")),
B(listOf("bb", "bc", "bd")),
C(listOf("aa", "bb", "dd"));
companion object {
private val normalizedValues = values().flatMap { value ->
value.type.map { "${value.name}.$it" }
}
fun listAll() = normalizedValues
fun search(type: String?) = normalizedValues.contains(type)
}
}
fun main() {
println(Test.listAll())
println(Test.search("B.bd"))
println(Test.search("B.ad"))
}
Вывод:
[A.aa, A.ab, A.ac, B.bb, B.bc, B.bd, C.aa, C.bb, C.dd]
true
false
(Примечание: я немного упростил ваш код и использовал lowerCamelCase для имен функций. Вытакже можно напрямую использовать normalizedValues
вместо listAll()
, но я решил сохранить ваши существующие подписи.)