Как вы вызываете метод из блока catch в Java? - PullRequest
2 голосов
/ 14 сентября 2011

Требование: Если есть какие-либо исключения, вызовите метод, который повторно проверяет данные

Моя реализация:

private void one() {
    try {
        //Valid data
    }catch(Exception e) {
    two();
    }
}

private void two() {
     //Process data with another input
     //On entry,
     one();
}

Я понимаю,что мое использование неверно.Как мне справиться с этим?

Ответы [ 3 ]

5 голосов
/ 14 сентября 2011

Вы можете сделать это именно так, как вы предлагаете, используя рекурсию. Я не вижу, в чем проблема. Лично, использование цикла обычно проще, чем использование рекурсии. Однако я бы не поймал все исключения. Скорее всего, вы захотите обрабатывать разные исключения по-разному.

private void one() {
  while(true) {
    try {
        //Valid data
        break;
    }catch(InvalidArgumentException e) { // or what ever you expect.
        two();
    }
  }
}

private void two() {
     //Process data with another input
     //On entry,
}

или даже

private void one() {
  while(true) {
    try {
        //Valid data
        break;
    } catch(InvalidArgumentException e) { // or what ever you expect.
        // Process data with another input
        // On entry,
    }
  }
}
1 голос
/ 14 сентября 2011

Лучший способ сделать это, Проверьте данные в цикле while где-то еще, прежде чем использовать данные в методе one(), Пока он не действителен, продолжайте исправлять до тех пор, пока он не станет действительным, а затем передайте его one().

После ваших комментариев в вопросе

сделайте вашу переменную error уровнем класса и сбросьте ее в методе two() следующим образом:

private void two() {
     this.error = false;
     //Process data with another input
     //On entry,
     one();
}

Удачи!

0 голосов
/ 14 сентября 2011

Использование, которое вы показали в коде, является правильным - Что заставляет вас думать, что это не правильно?

Однако я вижу, что вы вспоминаете оригинальный метод в улове, к которому у меня есть комментарии -

  1. Если он продолжит генерировать исключение, это приведет к переполнению стека.
  2. Вы хотели бы иметь некоторую предупредительную / другую логику для проверки, если это не зависит от времени или условийизменился во время разговора.
  3. Вы должны учитывать условие выхода, если вы застряли в цикле.
...