это возможно в Java?(код для выполнения) if (условие) - PullRequest
2 голосов
/ 01 июля 2011

Обратите внимание, что я не гава-джава. Я не могу использовать правильную терминологию, я изучаю Java на RFT на лету. То, что описано ниже, работает точно так, как указано.


В 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.*"});   

Но весь сценарий RFT должен завершиться и не выполнять никакого другого кода в случае сбоя любой из функций findANDclick. Функция ищет объект с 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 ]

5 голосов
/ 01 июля 2011

Этот код не симпатичен. Почему бы просто не поймать 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, поэтому вы не можете использовать его в качестве имени переменной.

2 голосов
/ 01 июля 2011

Нет, вы не можете сделать это.

Однако, если метод выдает исключение, зачем вам тогда проверять флаг продолжения? В любом случае он остановится, если findANDclick завершится неудачей.

1 голос
/ 01 июля 2011

Радек! Попробуйте выполнить следующий пример, просто чтобы уточнить, как работает обработка исключений 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. Это должен быть комментарий. Но понятнее в богатом форматировании.

Решение, предложенное Матиасом Шварцем

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.

Недостаток также очевиден: безобразная конструкция обработки исключений.

Но в Java этого не избежать. Это языковые правила.

0 голосов
/ 01 июля 2011

Я думаю, вы должны попробовать это:

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

    for (String[] param : params) {
        if ( findANDclick(param) ) break;
    }
0 голосов
/ 01 июля 2011

Вы не можете использовать , если . Вы можете использовать цикл 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)

Кстати, как и кто-то из упомянутых выше, продолжить - это неправильный выбор для имени переменной.

...