在java中有可能吗? (要执行的代码)if(condition)

时间:2011-07-01 07:04:44

标签: java if-statement rft

请注意我不是java大师。我可能没有使用正确的术语,我在RFT中学习Java。下面描述的内容与所述完全相同。


在ruby中我们可以像

一样编码
(code to execute) if (condition)

我想做同样的事情,因此我的RFT(Rational Functional Tester)代码易于阅读。我将以一种看起来像

的方式调用我的自定义函数
        findANDclick(new String[]{"id", "menuButton"});
        findANDclick(new String[]{"src", ".*homeicon_calendar.*"}); 
        findANDclick(new String[]{"src", ".*cycle_templates.*"});   

但是,如果任何findANDclick函数“失败”,整个RFT脚本需要完成并且不执行任何其他代码。该函数在html页面中搜索对象,如果它没有通过

找到任何对象throws new Exception
throw new Exception("findANDclick: the object was not found");

所以 findANDclick ONLY 的实例会抛出错误,以便执行下一个findANDclick。但如果没有找到并点击上一个对象,则继续寻找下一个对象是没有意义的。

我原以为我可以将变量continue设置为true,如果抛出异常,findANDclick会将其更新为false。然后我可以做类似

的事情
    if (continue) { findANDclick(new String[]{"id", "menuButton"});}
    if (continue) { findANDclick(new String[]{"src", ".*homeicon_calendar.*"}); }   
    if (continue) { findANDclick(new String[]{"src", ".*cycle_templates.*"});   }
如果我可以做类似

的事情,那将会很棒
        { findANDclick(new String[]{"id", "menuButton"}); } if (continue)
        { findANDclick(new String[]{"src", ".*homeicon_calendar.*"}); } if (continue)
        { findANDclick(new String[]{"src", ".*cycle_templates.*"}); } if (continue)

5 个答案:

答案 0 :(得分:5)

那段代码并不漂亮。为什么不简单地抓住Exception?这就是它们的用途。如下所示:

try { 
   findANDclick(new String[]{"id", "menuButton"});
   findANDclick(new String[]{"src", ".*homeicon_calendar.*"});    
   findANDclick(new String[]{"src", ".*cycle_templates.*"});   
}
catch (Exception e) {
}

如果任何findANDclick调用失败,则后续的调用将不会执行...

顺便说一句,continue是Java中的保留字,因此您不能将其用作变量名。

答案 1 :(得分:2)

不,你不能这样做。

但是,如果该方法抛出异常,为什么还需要检查continue标志呢?如果findANDclick失败,它将会停止。

答案 2 :(得分:1)

拉​​狄克!尝试执行以下示例,只是为了阐明Java异常处理的工作原理。

public class ExceptionHandling {
    /*Method that throws exception*/
    static void methodOne() throws Exception {
        System.out.println("methodOne();");
        try {
            throw new Exception();
        } catch (Exception e) {
            System.out.println("Exception caught in methodOne(), worked up, and thrown again.");
            throw new Exception();
        }
    }

    static void methodTwo() {
        System.out.println("methodTwo();");
    }

    public static void main(String[] args) {
        try {
            methodOne();
            methodTwo();
        } catch (Exception ex) {
            System.out.println("Exception caught in main()!");
        }
    }
}

此示例的输出:

methodOne();
Exception caught in methodOne(), worked up, and thrown again.
Exception caught in main()!

它表明第二种方法永远不会执行,如果第一种方法抛出异常

P.S。这应该是一个评论。但是丰富的格式化更清晰。

Mathias Schwarz

建议的解决方案
try { 
   findANDclick(new String[]{"id", "menuButton"});
   findANDclick(new String[]{"src", ".*homeicon_calendar.*"});    
   findANDclick(new String[]{"src", ".*cycle_templates.*"});   
} catch (Exception e) {
   // Workup exception somehow.
}

具有优势(您希望从Java开发人员的角度来看):

  1. 很简短;
  2. Java开发人员很清楚。
  3. 缺点也很清楚:丑陋的异常处理构造。

    但在Java中你无法避免它。这是语言规则。

答案 3 :(得分:0)

如果,则无法使用。您可以使用 do / while 循环,它或多或少地提供您正在寻找的语法。

do { findANDclick(new String[]{"id", "menuButton"}); } while (continue)
do { findANDclick(new String[]{"src", ".*homeicon_calendar.*"}); } while (continue)
do { findANDclick(new String[]{"src", ".*cycle_templates.*"}); } while (continue)
< BTW,就像上面提到的那样,对于变量名,continue是一个糟糕的选择。

答案 4 :(得分:0)

我想你应该试试这个:

    String[][] params = {
        {"id", "menuButton"},
        {"src", ".*homeicon_calendar.*"},
        {"src", ".*cycle_templates.*"}
    };

    for (String[] param : params) {
        if ( findANDclick(param) ) break;
    }