您如何以及在何处定义自己的 Java 中的异常层次结构?

2022-09-01 08:49:13

您如何以及在何处定义自己的 Java 中的异常层次结构?

我的主要问题涉及必须定义异常类的包位置。

我们是否为异常创建一个特殊的包,并将所有类都放在其中?


答案 1

我用这个作为一般规则。

  • 如果有意义,请使用预定义的 Java 异常。例如,如果您的代码具有某种 I/O 错误,则可以抛出 IOException。
  • 仅当需要区分 try/catch 块中的两个异常时,才使用异常层次结构。很多时候,让单个组件针对不同的错误抛出具有不同消息的单个异常类型是完全可以的。如果用户无法真正执行任何操作来专门处理错误,请使用相同的泛型异常类。如果用户能够以不同方式处理它们,则此时应使用层次结构。
  • 对于层次结构,不要让来自不同组件的所有异常都从基本异常继承。没有真正的理由这样做。如果消费者想要捕获任何内容,他们可以简单地捕获异常。
  • 对于包位置,我放置了一个 Exception 类及其相关的代码。因此,如果我在a.b.c.的软件包中有一个BusinessService,我就有一个a.b.c.BusinessException可以与之配合使用。我不喜欢把所有的异常都放到一个例外包里。它只是让它很难找到。

答案 2

我把所有的自定义异常都放进了一个包里。我这样做,而不是把它们“靠近”它们突然出现的位置。com.company.project.exception

我的推理是:如果一个给定的异常只在某个地方的一两个服务类中出现,那么它可能不是一个足够普遍的例外,值得拥有自己的类。只有当我看到一个共同的主题在多个地方弹出时,我才会去创建自定义 Exception 类的麻烦。如果它在多个地方弹出,那么没有逻辑包可以“附加”它,所以特定于异常的包似乎是正确的方法。