是否有更好的方法可以通过消息捕获特定的Exception,然后执行此操作:
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;
}
}
大多数其他例外情况都没有给我提供方法,只有消息。
所以我的问题是,这是正确的方法吗?用String比较?或者有更好的方法吗?
答案 0 :(得分:1)
依赖代码或状态代码很好但是依赖于消息可能会有问题,因为消息可能会发生变化。
您应该考虑重构和定义多个异常或为不同的方案定义代码。
答案 1 :(得分:1)
做一件事。
http://docs.oracle.com/javase/6/docs/api/java/lang/Throwable.html#getCause%28%29
public Throwable getCause()
为不同的异常定义你想要的代码就像空指针101一样......等等......
使用那个班级每个地方。因此,您必须只编写一次异常,并且可以使用尽可能多的项目。
在构建课程后,它将可以重复使用,满足您的所有需求
如果你有新的条件,只更新这个课程,所有的事情都将完成
根据我的说法,这是一个更好的解决方案......
这样您就可以获得正在寻找的功能。你必须自己做。