• Java compile时,提示 DeadCode的原因


    在工程编译时,编译器发现部分代码是无用代码,则会提示:某一行代码是DeadCode。今天compile工程的时候发现某一个循环出现这个问题,如下:

        public void mouseOver(final String[] xpathArray) {
            final int browserType = GlobalSettings.browserCoreType;
            // Selenium doesn't support the Safari browser
            if (browserType == 4) {
                Assert.fail("Mouseover is not supported for Safari now");
                Assert.fail("Incorrect browser type");
            }
    
            pause(pause);
            Robot rb = null;
            try {
                rb = new Robot();
            } catch (AWTException e) {
                e.printStackTrace();
            }
            rb.mouseMove(0, 0);
            try {
                webDriverWait.until(new ExpectedCondition<Boolean>() {
                    @Override
                    public Boolean apply(WebDriver driver) {
                        Boolean flag = false;
                        for (String xpath : xpathArray) {
                            WebElement we = findElement(xpath);
                            
                            if (browserType == 2 || browserType == 5 || browserType == 6) {
                                try {
                                    Actions builder = new Actions(browserCore);
                                    builder.moveToElement(we).build().perform();
                                    flag = true;
                                    break;
                                } catch (Exception e) {
                                    logger.error("Failed to mouseover " + xpath, e);
                                    flag = false;
                                    handleFailure(e.getMessage());
                                }
                                logger.info("Mouseover " + xpath);
                            } else if (browserType == 1 || browserType == 3) {
                                try {
                                    for (int i = 0; i < 5; i++) {//DeadCode
                                        Actions builder = new Actions(browserCore);
                                        builder.moveToElement(we).build().perform();
                                        logger.info("Mouseover " + xpath);
                                        flag = true;
                                        break;
                                    }
                                }catch (Exception e) {
                                    logger.error("Failed to mouseover " + xpath, e);
                                    flag = false;
                                    handleFailure(e.getMessage());
                                }
                            }
                        }
                        return flag;
                    }
                });
            }catch (Exception e){
                handleFailure(e.getMessage());
            }

    分析了下,其实循环部分的第二次就不会再执行了,因编译器已经检查到执行后的flag的状态为true,所以给出了DeadCode的警告。而代码实际运行过程中也确实不会执行第二次。

     举个例子:

    if(true && true){
        System.out.println("这里会一直被执行");
    }else{
        System.out.println("这里一直不会被执行");   
    }

    上例中,因compiler 已经判定if的结果只会为true,所以else中的语句永远不会被执行,因此else中为DeadCode。

    无法预判的语句

    Boolean a = true;
    Boolean b = true;
    if(a && b){
       System.out.println("这里会一直被执行");
    }else{
       System.out.println("这里一直不会被执行");
    }

    上例中,由于a 和 b是2个变量,编译器编译时,无法预判if的结果是true,因此不会警告else的内容为DeadCode。

  • 相关阅读:
    POJ 1095 Trees Made to Order 最详细的解题报告
    Producter and Consumer
    How to use the function of bind
    How to use the functions of apply and call
    Configurate vim tool
    #4713. 方程
    #4709. 树
    #4718. 管理
    #4710. 并
    #4707. 点分治
  • 原文地址:https://www.cnblogs.com/heaven1025/p/5772646.html
Copyright © 2020-2023  润新知