2010-04-21 43 views

回答

26

我将此用作一般规则。

  • 如果有意义,请使用预定义的Java异常。例如,如果你的代码有某种I/O错误,抛出一个IOException就可以了。
  • 如果您需要区分try/catch块中的两个异常,请仅使用异常层次结构。很多时候,单个组件抛出一个具有不同错误消息的异常类型是非常好的。如果用户不能真正做任何事情来专门处理错误,请使用相同的通用异常类。如果用户能够以不同的方式处理它们,那么应该使用层次结构。
  • 对于层次结构,不要让来自基本异常的不同组件的所有异常继承。没有真正的理由这样做。如果消费者想要捕捉任何东西,他们可以简单地捕捉异常。
  • 对于包的位置,我把一个Exception类和它所关联的代码放在一起。因此,如果我在a.b.c包中有一个BusinessService,那么我就有一个a.b.c.BusinessException。我不喜欢将所有异常放入异常包中。它只是使它很难找到。
2

该语言没有指定什么要求,用户定义的类应该放入哪些包。只要该类延伸java.lang.Throwable,就可以抛出该类。

+3

我认为提问者知道这一点。他的问题更多地涉及最佳实践。 – Sergio 2013-03-11 10:11:57

4

您可以在任何地方创建您的Exception类。

重要的是扩展一个现有的Exception类(实际上是java.lang.Throwable)。例如java.lang.Exceptionjava.lang.RuntimeException。第一个是检查异常,而扩展RuntimeException将导致未检查的异常;两者之间的差异详述如下here

11

我把我所有的自定义异常放入com.company.project.exception包中。我这样做,而不是让他们“靠近”他们出现的地点。

这里是我的推理:如果给定的异常只在某个地方出现在一个或两个服务类中,那么它可能不是一个足够的例外,应该拥有它自己的类。只有当我看到一个常见的主题出现在多个地方时,我才会去创建自定义Exception类的麻烦。如果它在多个地方出现,那么就没有合适的“附件”包,因此特定于异常的包似乎是正确的选择。

相关问题