我有以下结构:
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
子句?
嵌套您的异常处理程序。
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
)