Java: переход к следующему предложению `catch` - PullRequest
0 голосов
/ 10 декабря 2018

У меня следующая структура:

try {
  Request.Get(url).execute() // Apache Fluent
  // do some other stuff
} catch (HttpResponseException e) {
  if (e.getStatusCode() != 404) {
    //drop to next catch clause
  }
  handle404(e);
} catch (IOException e) {
  handleGenericIOException(e);
}

Я не могу понять, что входит в это утверждение if.Я хочу просто сказать: «Если исключение не 404, действуйте так, как будто это предложение никогда не поймало его».Но простой вызов throw e просто выбрасывает его из метода.Есть ли способ перейти к следующему предложению catch?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Я не думаю, что вы можете "перейти" к следующему предложению catch, но вы, вероятно, могли бы сделать что-то вроде этого:

try {
  Request.Get(url).execute() // Apache Fluent
  // do some other stuff
} catch (IOException e) {
  if (e instanceof HttpResponseException
      && ((HttpResponseException)e).getStatusCode()== 404) {
    handle404(e);
  } else {
    handleGenericIOException(e);
  }
}

, поскольку IOException также должно перехватывать HttpResponseExceptions (если это org.apache.http.client.HttpResponseException)

0 голосов
/ 10 декабря 2018

Вложите ваши обработчики исключений.

try {
  try {
    Request.Get(url).execute() // Apache Fluent
    // do some other stuff
  } catch (HttpResponseException e) {
    if (e.getStatusCode() != 404) {
      throw e;
    }
    handle404(e);
  }
} catch (IOException e) {
  handleGenericIOException(e);
}

Повторный бросок будет перехвачен во внешнем блоке try / catch, поскольку HttpResponseException является подклассом IOException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...