Cod*_*ife 9 kotlin kotlin-when
根据When in Kotlin 的文档,如果编译器知道所有值都被覆盖,则 else 不是强制性的。对于 emum 或密封类来说这是非常重要的,但是对于数字 1 到 5 的数组(startRating)如何做到这一点。
private fun starMapping(startRating: Int): String {
return when (startRating) {
1 -> "Perfect"
2 -> "Great"
3-> "Okay"
4-> "Bad"
5-> "Terrible"
// don't want to add else as I believe it is prone to errors.
}
}
Run Code Online (Sandbox Code Playgroud)
与此类似的东西
return when (AutoCompleteRowType.values()[viewType]) {
AutoCompleteRowType.ITEM -> ItemView(
LayoutInflater.from(parent.context).inflate(R.layout.item_venue_autocomplete_item_info, parent, false))
AutoCompleteRowType.SECTION -> SectionView(
LayoutInflater.from(parent.context).inflate(R.layout.item_venue_autocomplete_section, parent, false)
)
}
Run Code Online (Sandbox Code Playgroud)
Ser*_*gey 13
usingwhen语句在使用 int 的情况下不可能排除子句,因为编译器不知道如果不在 1..5 范围内else则返回什么。startRating例如,IllegalStateException如果值不在所需范围内,您可以抛出异常:
private fun starMapping(startRating: Int): String {
return when (startRating) {
1 -> "Perfect"
2 -> "Great"
3-> "Okay"
4-> "Bad"
5 -> "Terrible"
else -> throw IllegalStateException("Invalid rating param value")
}
}
Run Code Online (Sandbox Code Playgroud)
或者你可以这样做:
return when {
startRating <= 1 -> "Perfect"
startRating == 2 -> "Great"
startRating == 3 -> "Okay"
startRating == 4 -> "Bad"
else -> "Terrible"
}
Run Code Online (Sandbox Code Playgroud)
但else条款是必需的。
| 归档时间: |
|
| 查看次数: |
9159 次 |
| 最近记录: |