And*_*ndy 11 java exception-handling exception custom-exceptions
我正在寻找为我Exceptions目前正在进行的项目实现自己的一套.该项目依赖于具有基本框架异常的核心框架MyFrameworkException(我也在编写此框架).
对于任何给定的项目,我想抛出几种不同的类型,Exceptions我无法决定使用多个子类或单个子类与某种形式的Enum构造函数参数.
在这两种情况下我都有:
public class MyFrameworkException   extends Exception              { /*...*/ }
选项1:
public class MyProjectBaseException extends MyFrameworkException   { /*...*/ }
public class SpecificExceptionType1 extends MyProjectBaseException { /*...*/ }
public class SpecificExceptionType1 extends MyProjectBaseException { /*...*/ }
public class SpecificExceptionType1 extends MyProjectBaseException { /*...*/ }
然后,在整个项目中,我会针对发生的任何问题抛出特定的异常.
选项2:
public class MyProjectException extends MyFrameworkException {
  public static enum Type {
    SpecificType1, SpecificType2, SpecificType3
  }
  public MyProjectException( Type type ) { /*...*/ }
}
MyProjectException对于发生的任何问题,我总是会抛出特定的枚举类型.我提供了一些机制,以便可以MyProjectException根据类型枚举对任何一个执行switch语句.
处理项目中的异常的最佳方法是什么,尤其是那些共享公共基础架构的异常?两种选择是否都是好的解决方案?为什么或者为什么不?什么是更好的解决方案?
选项2(一个常见的例外+枚举)的主要缺点是你失去了一些检查异常的效用.一种方法几乎不得不简单地说"框架相关的东西可能会出错":
public void foo()
throws MyFrameworkException
...而不是"x或y可能出错":
public void foo()
throws SomethingWentWrongException, SomethingElseWentWrongException
这意味着可能需要处理一个框架异常的函数必须准备好处理它们中的任何一个,而如果你是特定的,只需要准备一个函数来处理它调用的框架方法抛出的异常.
所以对我来说,选项1之类的层次结构(如果结构表明自己,它不需要那么平坦)是要走的路.也就是说,有些人根本不喜欢经过检查的例外情况,对我们来说,我怀疑上述内容并不是一个引人注目的论点.:-)
编辑并获取duffymo的观点:我假设你在谈论你真正必须创建的异常.绝对抛出标准异常,只要它有意义(几乎无处不在).不要创建自己的MyFrameworkIllegalArgumentException,例如,只使用IllegalArgumentException(或其各种子类).
| 归档时间: | 
 | 
| 查看次数: | 2197 次 | 
| 最近记录: |