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方法,只是消息


所以我的问题是,这是正确的方法吗?和字符串比较?或者有更好的方法吗?

依赖代码或状态代码是可以的,但是依赖消息可能会有问题,因为消息可能会更改

您应该考虑重构并定义多个异常,或者为不同的场景定义代码。

只需做一件事

  • 收集项目可能发生的所有类型的异常
  • 通过扩展异常创建一个单独的类
  • 重写getCause()方法
  • public-Throwable-getCause()

    为不同的异常定义所需的代码,如空指针101等等

    在任何地方都可以使用该类。所以,您只需编写一次异常,就可以与尽可能多的项目一起使用

    在构建类之后,它将可重用以满足您的所有需求

    如果你得到新的条件,只更新这个类,所有的事情都会完成

    我认为这是一个更好的解决方案


    通过这种方式,您可以获得所需的功能。你必须自己做。

    问题是,我不仅使用我自己的异常,还使用libs或java核心的东西,比如
    java.net.SocketException
    ——因此重构可能会导致真正的麻烦……在这种异常情况下,您收到不同消息的多个场景是什么,以及在这些场景中希望做什么?问题是是否有更好的方法检查具有特定消息的异常,然后对消息本身执行字符串比较的方法。或者Exception或Throwable中是否有其他方法可以调用以获取异常的详细信息。SocketException中没有其他方法可以依赖。可能是检查getCause()中的内容,否则在这种情况下,最好的选择是getMessage()。好的,但是我仍然需要执行.getMessage()操作来检查异常并用我的code@reox是的,这是完全正确的,但是我们需要做一些事情来完全满足我们自己的目的