If statement 使用带有枚举的kotlin子句而不是多个if
我正在使用下一个代码:If statement 使用带有枚举的kotlin子句而不是多个if,if-statement,kotlin,enums,If Statement,Kotlin,Enums,我正在使用下一个代码: override fun presentNativeItem(dcsItem: DCSItem?): Any { if (dcsItem?.type == "NavMenu") { return buildNavMenu(dcsItem) } else if (dcsItem?.type == "NavLink") { return buildNavLink(dcsItem)
override fun presentNativeItem(dcsItem: DCSItem?): Any {
if (dcsItem?.type == "NavMenu") {
return buildNavMenu(dcsItem)
} else if (dcsItem?.type == "NavLink") {
return buildNavLink(dcsItem)
} else if (dcsItem?.type == "Image") {
return buildImage(dcsItem)
}
else throw IllegalStateException("Unknown Type ${dcsItem?.type} of NavItem")
}
但我希望使用下一个枚举,而不是使用多个if:
enum class DSCType {
NAVMENU,
NAVLINK,
IMAGE;
override fun toString(): String {
return this.name.toLowerCase()
}
companion object {
fun fromString(value: String?): DSCType? {
return when (value?.toLowerCase()) {
"NavMenu" -> NAVMENU
"NavLink" -> NAVLINK
"Image" -> IMAGE
else -> null
}
}
}
}
有没有办法用kotlin的方式实现这一点
谢谢使您的输入参数不可为空,并将您的函数更改为:
override fun presentNativeItem(dcsItem: DCSItem) = when(dcsItem) {
NAVMENU -> buildNavMenu(dcsItem)
NAVLINK -> buildNavLink(dcsItem)
IMAGE -> buildImage(dcsItem)
}
试试这个:
fun presentNativeItem(dcsItem: DCSItem?): Any {
return enumValues<DSCType>().firstOrNull { dcsItem?.type == it.typeName }
?.build(dcsItem)
?: throw IllegalStateException("Unknown Type ${dcsItem?.type} of NavItem")
}
enum class DSCType(val typeName: String) {
NAV_MENU("NavMenu") {
override fun build(dcsItem: DCSItem?): Any {
TODO("not implemented")
}
},
NAV_LINK("NavLink") {
override fun build(dcsItem: DCSItem?): Any {
TODO("not implemented")
}
},
IMAGE("Image") {
override fun build(dcsItem: DCSItem?): Any {
TODO("not implemented")
}
};
abstract fun build(dcsItem: DCSItem?): Any
}
fun presentNativeItem(dcsItem:dcsItem?):有吗{
返回enumValues().firstOrNull{dcsItem?.type==it.typeName}
?构建(dcsItem)
?:抛出IllegalStateException(“NavItem的未知类型${dcsItem?.Type}”)
}
枚举类DSCType(val类型名称:字符串){
导航菜单(“导航菜单”){
覆盖有趣的构建(dcsItem:dcsItem?):任何{
待办事项(“未实施”)
}
},
导航链接(“导航链接”){
覆盖有趣的构建(dcsItem:dcsItem?):任何{
待办事项(“未实施”)
}
},
图像(“图像”){
覆盖有趣的构建(dcsItem:dcsItem?):任何{
待办事项(“未实施”)
}
};
抽象趣味构建(dcsItem:dcsItem?):有吗
}
我收到下一条消息:如果不允许使用over enum条目,请改用comparison。您需要删除is
。