java.lang.Exception vs. roll your own exception
在什么时候你会创建自己的异常类,而不是使用java.lang.Exception?(一直以来?只有当它将在包装之外使用时?只有当它必须包含高级逻辑时?等等...)
在什么时候你会创建自己的异常类,而不是使用java.lang.Exception?(一直以来?只有当它将在包装之外使用时?只有当它必须包含高级逻辑时?等等...)
我认为你需要问自己一个完全不同的问题:“创建新异常会给我或使用我的代码的开发人员带来什么好处?实际上,它给你或其他人带来的唯一优势是处理异常的能力。这似乎是一个显而易见的答案,但实际上并非如此。您只应处理可以合理地从中恢复的异常。如果您抛出的异常是一个真正致命的错误,为什么给开发人员一个错误处理它的机会呢?
更深入的讨论:自定义异常:何时应创建它们?
原因一:
需要抓住特定的东西。如果调用代码需要处理特定的异常情况,则需要区分异常,而 Java 会区分不同类型的异常,因此您需要编写自己的异常。
基本上,如果有人必须写:
catch(ExistingException e) {
if({condition}) {
{ some stuff here}
}
else {
{ different stuff here}
}
}
你可能想写一个特定的扩展;catch 异常匹配比条件匹配更清晰,恕我直言。
请记住:您的新异常可以是 RuntimeException 的子类
原因二:
API 整合。如果你写了一个接口,并且你有几个实现,那么它们可能会调用不同的API,并抛出一大堆不同的非运行时异常:
interface MyInterface {
void methodA();
}
class MyImplA {
void methodA() throws SQLException { ... }
}
class MyImplB {
void methodA() throws IOException { ... }
}
你真的希望MyInterface.methodA抛出SQLException和IOException吗?也许这样,将可能的异常包装在自定义异常中是有意义的。这又可以是一个运行时异常。甚至是运行时异常本身...