5

java中是否有任何替代方法可以使jdk1.6中的代码成为可能。我知道在 jdk 1.7 中也是可能的,但我坚持使用 jdk1.6。

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

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

   }
4

4 回答 4

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

}

我认为没有其他选择。

于 2013-11-06T03:26:11.200 回答
2

这个语法是在 Java 1.7 中添加的,因为以前很难干净地做到这一点。

您可以做几件事:

  • 对 CustomExceptionX 的公共基类使用单个捕获(通常是异常,但如果其中一个实际上是错误,则有时您必须上升到 Throwable)。缺点是它还会捕获 RuntimeExceptions,因此您必须像 Subin 建议的那样进行运行时检查。如果您是定义 CustomExceptionX 的人,您可以为此用法定义一个公共超类,而不必进行运行时检查。
  • 将您的通用逻辑放在一个函数中,并在两个捕获中调用此函数。这样,唯一的重复就是对函数的调用。
于 2013-11-06T03:34:20.283 回答
0

我终于继续使用这段代码,

  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;
     }

   }
于 2013-11-06T06:23:20.183 回答
0

在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

我希望它能解决你的问题。

于 2013-11-06T03:46:09.403 回答