业务类抛出异常的问题
,最近做的一个项目中
看到了一些这样的接口
public RetMsg queryMonthlyList(String mobileno, int theYear, int theMonth, int type) throws BOSSDataPackageException,ExceedMaxBOSSConnectionException, BranchNotFoundException,IOException, ListNotFoundException ;
抛出的异常其中一部分是自定义的异常.如果实现类或者实现类的子类需要向上抛出其他异常的话就没法处理了 只能用try了.为什么不直接这样写?
public RetMsg queryMonthlyList(String mobileno, int theYear, int theMonth, int type) throws Exception
方法中抛出子异常的话 也一样可以捕捉到
朋友说:
"作为接口层,应该是不需要查看代码就可以调用开发,如果只是抛出Exception,调用接口的开发人员根本不可能知道具体的异常类型是什么。可以看看相关的开源框架或者JDK src。我想应该没有任何一个地方是直接抛出Exception的。"
一开始我觉得好象有些道理..不过琢磨了下,觉得还是欠妥,开源框架和JDK 都是作为一种工具来使用,代码相对来说很稳定,抛出的异常也有针对性,但是一个业务接口的实现很难判断其中会出现的异常,如此将接口抛出异常的类型限定总觉得不合适.
我觉得一些业务接口和工具类的接口应该遵循不同的规则吧?
------解决方法--------------------------------------------------------
public RetMsg queryMonthlyList(String mobileno, int theYear, int theMonth, int type) throws Exception
如果这样写,跟不写throws Exception
有什么区别?????
接口中多写几个异常类型,是为了限制.如果你有更多的异常抛出.可以在实现类,或者子类中这样写:
catch (ExceedMaxBOSSConnectionException e) {
throw e;
}
catch (IOException e) {
throw e;
}
catch (OtherException e) {
throw new Exception(e);
}
------解决方法--------------------------------------------------------
向二楼这样写也许会好一点,这样可以直接捕捉到
------解决方法--------------------------------------------------------
try
{
代码
}
catch (Exception e){
throw new RuntimeException(e.getMessage(), e);
}
------解决方法--------------------------------------------------------
抛出异常 肯定需要指定具体是什么异常
直接exception 不该在程序中出现 算是编码规范吧