代码之家  ›  专栏  ›  技术社区  ›  Ωmega

在公式或赋值中使用开关

  •  2
  • Ωmega  · 技术社区  · 6 年前

    Java ,是否可以使用 在某个等式或赋值的内部?

    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 回复  |  直到 6 年前
        1
  •  4
  •   Andy Turner    6 年前

    构建地图:

    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种情况,因此这不太可能代表实质性的性能问题。

    就我个人而言,我一般不喜欢嵌套的条件表达式:它们觉得有点太聪明了,不利于自己(尽管这一个并不是那么糟糕)。

        2
  •  0
  •   Mohamed Nashaat    6 年前

    如果我理解正确的话,你想让stringstr成为单词status和switch语句返回值之间的串联,试试这个解决方案,它对我很有用。

    String str = "Status";
           switch (status){
               case 1:
                   str = str+" "+"STATE_IDLE";
                   break;
    
               case 2:
                   str = str+" "+"STATE_BUFFERING";
                   break;
           }
    
        }