繁体   English   中英

在jdk 1.6中监视单个catch中的多个异常

[英]Monitor Multiple exception in single catch in jdk 1.6

在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.

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

}

我认为没有其他选择。

这种语法是在Java 1.7中添加的,因为以前很难干净地完成它。

你可以做一些事情:

  • 对CustomExceptionX的公共基类使用单个catch(通常是Exception,但有时如果其中一个实际上是Error,则必须转到Throwable)。 缺点是它还会捕获RuntimeExceptions,所以你必须像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;
     }

   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM