Java 在JDK1.6中监视单个catch中的多个异常

Java 在JDK1.6中监视单个catch中的多个异常,java,exception-handling,Java,Exception Handling,java中是否有其他方法可以使jdk1.6中的代码成为可能。我知道在jdk1.7中也可以这样做,但我仍然坚持使用jdk1.6 下面的代码可以捕获多个异常,我想处理这些异常并将其添加到数据库表中。因为对于所有3个异常,我的异常处理逻辑将保持不变。我不想对多个catch块重复相同的代码 try{ //do somthing here }catch(CustomException1 ex1 | CustomException2 ex2 | CustomException3 ex3)

java中是否有其他方法可以使jdk1.6中的代码成为可能。我知道在jdk1.7中也可以这样做,但我仍然坚持使用jdk1.6

下面的代码可以捕获多个异常,我想处理这些异常并将其添加到数据库表中。因为对于所有3个异常,我的异常处理逻辑将保持不变。我不想对多个catch块重复相同的代码

try{
      //do somthing here
    }catch(CustomException1 ex1 | CustomException2 ex2 | CustomException3 ex3){
          // Here goes common Exception handing logic.

   }
}


我认为没有其他选择。

这个语法是在Java1.7中添加的,因为以前很难做到干净

您可以做以下几件事:

  • 对CustomExceptionX的公共基类使用单个catch(通常为Exception,但如果其中一个实际上是错误的,则有时必须使用Throwable)。缺点是它还将捕获运行时异常,因此您必须像Subin建议的那样执行运行时检查。如果您是定义CustomExceptionX的人,那么您可以为此用途定义一个公共超类,而无需执行运行时检查
  • 将通用逻辑放在一个函数中,并在两个捕获中调用此函数。这样,唯一的重复将是对函数的调用

    • 这在jdk1.6中是不可能的。我刚刚找到了另一个选择。您可以做的是定义一个类级变量

         Object c ;
      
      然后在相应的catch块中指定引用

         catch(CustomException1 cx1) {
          c= cx1;
         }
      
         catch(CustomException2 cx2){
          c = cx2;
          }
      
        if( c instanceof cx1 || c instanceof cx2) 
      
        // put your common logic here
      

      我希望它能解决你的问题

      我终于开始写这段代码了

        try{ 
            //do somthing here 
          }catch(SuperExceptionClass ex){ 
      
           if (ex instanceof CustomException1 || ex instanceof CustomException2 ||  ex instanceof CustomException2) { 
               // Here goes common Exception handing logic.
           } else { 
               throw ex;
           }
      
         }
      

      不幸的是,要添加的新模式表明,这是以前不容易做到的事情……instanceof关键字中没有大写字母O
        try{ 
            //do somthing here 
          }catch(SuperExceptionClass ex){ 
      
           if (ex instanceof CustomException1 || ex instanceof CustomException2 ||  ex instanceof CustomException2) { 
               // Here goes common Exception handing logic.
           } else { 
               throw ex;
           }
      
         }