提问者:小点点

Java:拖放到下一个“catch”子句


我有以下结构:

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,就像这个子句从未捕获过它一样”。但是简单地调用扔e只是将它从方法中抛出。有没有办法转发到下一个catch子句?


共2个答案

匿名用户

嵌套您的异常处理程序。

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);
}

因为< code > HttpResponseException 是< code>IOException的子类,所以将在外部try / 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还应该捕获HttpResseExceptions(如果它是org. apache.http.client.HttpResseException