Java 捕获具有特定消息的异常
是否有更好的方法捕获带有消息的特定异常,然后执行以下操作:Java 捕获具有特定消息的异常,java,exception-handling,Java,Exception Handling,是否有更好的方法捕获带有消息的特定异常,然后执行以下操作: try{ methodThatWillProbablyThrowASocketException(); } catch(SocketException e){ if(e.getMessage().contains("reset")){ // the connection was reset // will ignore } else{ throw e; } } 例如,Http
try{
methodThatWillProbablyThrowASocketException();
} catch(SocketException e){
if(e.getMessage().contains("reset")){
// the connection was reset
// will ignore
} else{
throw e;
}
}
例如,HttpStatusException
为我提供了方法getStatusCode()
,在这里我可以很容易地比较错误状态是404还是502,并且可以决定做什么:
try{
methodThatWillProbablyThrowAHTTPException();
} catch(HttpStatusException e){
if(e.getStatusCode() == 404){
// not found, will not continue
}
if else(e.getStatusCode() == 502){
// server errror, try again
} else{
throw e;
}
}
大多数其他的异常都没有给我prober方法,只是消息
所以我的问题是,这是正确的方法吗?和字符串比较?或者有更好的方法吗?依赖代码或状态代码是可以的,但是依赖消息可能会有问题,因为消息可能会更改 您应该考虑重构并定义多个异常,或者为不同的场景定义代码。只需做一件事
通过这种方式,您可以获得所需的功能。你必须自己做。问题是,我不仅使用我自己的异常,还使用libs或java核心的东西,比如
java.net.SocketException
——因此重构可能会导致真正的麻烦……在这种异常情况下,您收到不同消息的多个场景是什么,以及在这些场景中希望做什么?问题是是否有更好的方法检查具有特定消息的异常,然后对消息本身执行字符串比较的方法。或者Exception或Throwable中是否有其他方法可以调用以获取异常的详细信息。SocketException中没有其他方法可以依赖。可能是检查getCause()中的内容,否则在这种情况下,最好的选择是getMessage()。好的,但是我仍然需要执行.getMessage()操作来检查异常并用我的code@reox是的,这是完全正确的,但是我们需要做一些事情来完全满足我们自己的目的