int num = 100;
char c = 'a';
c = someBigTask(c);
switch (c) {
case 'a':
num += 100;
case 'c':
num += 10;
case 'd':
case 'e':
num += 100;
}
我希望在另一个条件中使用'when'表达式来消除相同的代码,就像这个switch-case代码一样,但我找不到解决方案..
我确实喜欢这个问题:
var num = 0
when(c){
'a' -> num += 100
'a', 'c' -> num += 10
'a', 'c', 'd', 'e' -> num += 100
else -> 0
}
我得到的结果只执行qazxsw poi ..
我可以在此问题中仅使用'when'表达式获得解决方案吗?
在Kotlin中,等效的'a' -> num += 100
表达式如下:
when
请注意,在这种情况下,val c = // some char
val num = 100 + when (c) {
'c' -> 10
'a', 'd', 'e' -> 100
else -> 0
}
情况是必要的else
,因为它用作en表达式,即它必须涵盖when
must be exhaustive的所有可能值。例如,如果c
是c
(或Boolean
或具有有限域的任何其他值),那么你可以在没有enum
的情况下覆盖所有可能的情况,因此编译器将允许以下内容:
else
如果val c = // some boolean
val num = 100 + when (c) {
true -> 10
false -> 0
}
不是用作表达式而是用作传统的控制流语句(如Java 12之前的when
语句),则不需要详尽无遗,如下面的代码片段所示:
switch