如何通过modeName属性获取Kotlin枚举类ParticleMode的实例
根据modeName获取Kotlin枚举实例的实现方案
方法一:直接遍历枚举项查找
在枚举类的伴生对象中添加查找方法,遍历所有枚举实例匹配modeName:
enum class ParticleMode(val modeName: String) { ABOVEHEAD("abovehead"), BELOWHEAD("belowhead"); companion object { fun fromModeName(modeName: String): ParticleMode? { return entries.find { it.modeName == modeName } } } }
调用方式:
val targetMode = ParticleMode.fromModeName("abovehead") // 返回ParticleMode.ABOVEHEAD
找不到匹配项时返回null,适合需要容错的场景。
方法二:预构建映射表提升效率
如果需要频繁执行查找操作,提前用associateBy构建modeName到枚举实例的映射表,避免每次遍历:
enum class ParticleMode(val modeName: String) { ABOVEHEAD("abovehead"), BELOWHEAD("belowhead"); companion object { private val modeToInstanceMap = entries.associateBy(ParticleMode::modeName) fun fromModeName(modeName: String): ParticleMode? { return modeToInstanceMap[modeName] } } }
这种方式查找时间复杂度为O(1),性能更优。
方法三:找不到时抛出异常
如果业务要求必须找到匹配项,可在方法中抛出异常替代返回null:
fun fromModeName(modeName: String): ParticleMode { return modeToInstanceMap[modeName] ?: throw IllegalArgumentException("不存在modeName为$modeName的ParticleMode枚举项") }
内容的提问来源于stack exchange,提问作者kel5isgod
相关产品推荐
相关产品推荐

