在方程式或值分配中使用开关

时间:2018-09-08 22:06:24

标签: java

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";
                     }
                   };

是否可以使用单独的功能执行类似的操作?

2 个答案:

答案 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;
       }

    }

希望这会有所帮助:-)