我一直在更新一个现有的库,以抛出异常来帮助使用该库的人改进调试。
一开始,我认为我应该定义特定于每个类的异常,但事实证明,大多数异常都是现有运行时异常(例如,FooNegativeIntArgumentException extends IllegalArgumentException、FooNullBarException extends NullPointerException)的简单扩展,具有特定的消息。
定义新异常与使用现有异常的权衡是什么?是否有任何约定/最佳实践?
此外,考虑到向后兼容性的需要,这些异常中的大多数(如果不是全部)都是运行时异常。
发布于 2010-01-13 03:46:19
下面是my take on why we have different types of exception and when to create custom exception types (注意:这里使用.NET类型作为示例,但同样的原则也适用于Java语言和任何其他使用结构化错误处理的语言)。作为一个完整的答案,在这里发布可能太长了,所以我只发布两个关键摘录。
在您的情况下,您的自定义异常类型听起来不像是在填补可以使用标准异常传达的症状的空白,而且它们不会为编程处理添加任何额外的信息,所以不要创建它们。只需使用标准版本即可。
发布于 2010-01-13 03:44:12
在不像这样添加任何值的情况下扩展异常是完全浪费时间的,并且会产生最好避免的持续维护成本。
使用标准异常。
这并不是说您永远不应该使用自定义异常,只是不应该在您呈现的用例中使用。
此外,在创建自定义异常时,它们应该与导致它们的条件相关,而不是与可能引发它们的类相关。将它们与业务/功能区域相关联是可以的,因为导致异常的错误条件很可能以这种方式相关,并且它将提供有用的过滤技术。
发布于 2010-01-13 03:45:31
来自Effective Java
您应该倾向于使用标准异常,并使用Java平台库中包含您所描述的内容的未检查异常集。重用异常有以下好处:
使您的API更易于学习和使用,因为它符合程序员已经熟悉的既定约定。
更少的异常类意味着更小的内存占用和更少的加载类时间。
https://stackoverflow.com/questions/2051797
复制相似问题