【问题标题】:Why am I get a warning "Dead code"?为什么我会收到“死代码”警告?
【发布时间】:2012-08-10 17:45:15
【问题描述】:
    if (myCondition1 && myCondition2 && myCondition3)
    {
    ...
    }

我编写了这段代码并成功运行。但我收到了关于(...)部分的警告。警告是“死代码”。这对我来说很有趣。你有什么想法吗? 谢谢你

【问题讨论】:

  • 你确定你曾经到达过标记为“死”的代码部分吗?
  • 我们需要更多(真实)代码来查看为什么会弹出此警告。通常你有类似System.exit(0); System.out.println( 'blab' ); 的东西,第二个命令在执行时永远无法访问。
  • 假设你有 myCondition1 = true 和 myCondition2 = !myCondition1。
  • 您可以在if 声明之前发布代码吗?您是否将 myCondition 之一的值强制为 false?
  • @Sirko 原则上你是对的,但System.exit() 不会影响可达性。见stackoverflow.com/questions/11487184/…

标签: java warnings


【解决方案1】:

“死代码”是永远不会执行的代码。很可能您的条件之一在某处被硬编码为 false,从而使 if 中的条件始终为 false。

【讨论】:

    【解决方案2】:

    死代码意味着它永远不会执行。例如

    void someMethod() {
        System.out.println("Some text");
        return;
        System.out.println("Another Some text"); // this is dead code, because this will never be printed
    }
    

    在您的条件检查的情况下也是如此,例如

    String obj = "";
    if(obj == null && obj.equals("")) { // here you get warning for Dead code because obj is not null and first condition is false so obj.equals("") will never evaluate
    
    }
    

    【讨论】:

      【解决方案3】:

      永远无法访问块内的代码。原因很可能是其中一个条件始终为假。

      【讨论】:

        【解决方案4】:

        如果 myCondition1、myCondition2 和 myCondition3 中的一个或多个始终为 false(如 private const bool myCondition1 = false;),则 if 中的代码将永远不会被执行。

        【讨论】:

          【解决方案5】:

          发生这种情况的原因有很多。整个if 块都死,原因如下:

          boolean condition1 = true;
          boolean condition 2 = !condition1;
          
          if(condition1 && condition2) {
              //This code is all dead
              Foo f = fooFactory();
              f.barr(new Bazz());
          }
          

          或者你使用return、break或continue之类的东西无条件地离开if块,如下所示:

          for(Foo f : foos) {
              if(true) {
                  f.barr(new Bazz());
                  break;
                  //Everything after here is dead
                  System.out.println("O noes. I won't get printed :(");
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-10-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-24
            • 2011-11-10
            相关资源
            最近更新 更多