捕获特定消息的异常

时间:2013-04-11 09:04:02

标签: java exception-handling

是否有更好的方法可以通过消息捕获特定的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比较?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

依赖代码或状态代码很好但是依赖于消息可能会有问题,因为消息可能会发生变化。

您应该考虑重构和定义多个异常或为不同的方案定义代码。

答案 1 :(得分:1)

做一件事。

  1. 收集项目可能发生的所有类型的异常。
  2. 通过扩展Exception来创建一个单独的类。
  3. 覆盖getCause()方法。
  4. http://docs.oracle.com/javase/6/docs/api/java/lang/Throwable.html#getCause%28%29

    public Throwable getCause()

    为不同的异常定义你想要的代码就像空指针101一样......等等......

    使用那个班级每个地方。因此,您必须只编写一次异常,并且可以使用尽可能多的项目。

    在构建课程后,它将可以重复使用,满足您的所有需求

    如果你有新的条件,只更新这个课程,所有的事情都将完成

    根据我的说法,这是一个更好的解决方案......

    这样您就可以获得正在寻找的功能。你必须自己做。