在 Java 中,是否可以在某些方程式或值分配中使用 switch ?
String str;
以下是我尝试避免的标准方法的示例:
private String statusName() {
switch (status) {
case 1:
return "STATE_IDLE";
case 2:
return "STATE_BUFFERING";
case 3:
return "STATE_READY";
case 4:
return "STATE_ENDED";
default:
return "STATE_UNKNOWN";
}
}
str = "Status: " + statusName();
这是一个类似的示例,我想知道是否可能(“代码”的语法不正确!)
str = "Status: " + { switch (status) {
case 1:
return "STATE_IDLE";
case 2:
return "STATE_BUFFERING";
case 3:
return "STATE_READY";
case 4:
return "STATE_ENDED";
default:
return "STATE_UNKNOWN";
}
};
是否可以使用单独的功能不执行类似的操作?
答案 0 :(得分:4)
建立地图:
str = "Status" +
Map.of(1, "STATE_IDLE", 2, "STATE_BUFFERING" /* etc */)
.getOrDefault(status, "STATE_UNKNOWN");
当然,您不必每次都构建地图:您可以构建一次并将其分配给字段。
但是,实际上,定义一个单独的函数没有任何优势。
OP代码最相似的翻译如下:
"Status: " + (
status == 1 ? "STATE_IDLE" :
status == 2 ? "STATE_BUFFERING" :
status == 3 ? "STATE_READY" :
status == 4 ? "STATE_ENDED" :
"STATUS_UNKNOWN")
这将status
逐一检查,而不是像在开关中那样跳跃。这里只有4种情况,因此这不太可能代表严重的性能问题。
我个人而言,我通常不喜欢嵌套的条件表达式:它们为自己的利益感到太聪明了(尽管这个条件还不错)。
答案 1 :(得分:0)
如果我理解正确,那么您希望将String str设置为单词status和switch语句的返回值之间的串联,请尝试使用此解决方案。
String str = "Status";
switch (status){
case 1:
str = str+" "+"STATE_IDLE";
break;
case 2:
str = str+" "+"STATE_BUFFERING";
break;
}
}
希望这会有所帮助:-)