Возврат к предыдущей позиции после оператора catch - PullRequest
1 голос
/ 10 апреля 2011

У меня есть фрагмент кода, в котором есть цикл внутри оператора try. Когда исключение генерируется и перехватывается, цикл прерывается, и выполнение продолжается на своем пути. Как я могу заставить выполнение продолжаться до конца цикла после завершения блока catch?

Вот фрагмент моего кода:

private ArrayList<URL> download(final InputStream in, URL url, int maxDepth) throws IOException {
  try {
    ...
    for (final URL link : links) {
      //if exception is caught, loop will be broken here.........
      download(link.openStream(), link, maxDepth - 1);
    }
    return alLinks;

  } catch (final IOException e) {
    // Display an error if anything fails.
    this.searchResults.append(e.getMessage());
    return null;
  }
}

Мне интересно, есть ли какой-нибудь простой способ вернуться обратно прямо до окончания цикла for, чтобы он мог завершить итерации по остальным элементам ...

Большое спасибо!

Ответы [ 2 ]

8 голосов
/ 10 апреля 2011

Переместите блок try-catch в цикл for.

private ArrayList<URL> download(final InputStream in, URL url, int maxDepth) throws IOException {
    ...
    for (final URL link : links) {
      //if exception is caught, loop will be broken here.........
      try{
        download(link.openStream(), link, maxDepth - 1);
      }
      catch (final IOException e) {
    // Display an error if anything fails.
    this.searchResults.append(e.getMessage());
      }
    }
    return alLinks;
}
2 голосов
/ 10 апреля 2011

Просто поместите блок try в цикл:

for (...) {
    try {
        ...
    }
    catch (...) {
        ...
    }
}

Я не уверен, имеет ли это последствия для времени выполнения или чего-то подобного, но в тех случаях, когда исключение составляетна самом деле выбрасываются редко (он же «исключительный» :-P) Я бы не ожидал, что это будет иметь существенное значение.

...