art*_*tur 5 java exception-handling
假设您有一些声明抛出未经检查的异常的方法
编辑:让我们说这不是你设计这个方法的人,而是一个非常可敬的框架的作者(Spring,aekhm!),你只是称它为
void someMethod() throws UncheckedException;
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是:
假设您有其他方法正在调用 someMethod
void someOtherMethod() {
someMethod()
}
Run Code Online (Sandbox Code Playgroud)
我的第二个问题是:
UncheckedException的someOtherMethod?只是一点背景:
Spring框架的异常基于未经检查的异常.因此,例如,某些方法正在抛出(并在其中声明throws)DataAccessException.如果我的代码正在使用这些调用,它是否应该声明抛出这些异常?为什么?
无需在throws ...方法的子句中声明未经检查的异常.如Java语言规范中所述," 允许但不要求在throws子句中提及未经检查的异常类 ".
如果您预计API的用户可能会遇到它们,则通常会在Javadoc中列出未经检查的异常.一个常见的例子是列出IllegalArgumentException可能抛出的原因.
如果用另一个方法包装一个方法,则应用有效Java原则来抛出适合抽象级别的异常(第61项).这应该应用于已检查的异常和预期的未经检查的异常.
最佳实践是根本不声明未经检查的异常。您看不到这样的方法:
public void foo() throws NullPointerException {...}
Run Code Online (Sandbox Code Playgroud)
您应该仅将 throws 用于Checked Exceptions. 通过说throws你希望 clinet 以任何方式处理他的异常,但这对于Unchecked Exceptions
编辑:
评论中进行了一些热烈的讨论,因此只是为了澄清一下:您不必声明,Unchecked Exceptions但这并不意味着您不能,尽管在大多数情况下您不应该这样做。我更喜欢在 javadoc 风格的注释中而不是在throws子句中提及它们。还有很多其他示例,您通常不应该做某事,但在某些情况下您可能需要这样做。在我看来,底线是:不,你不应该Unchecked Exceptions在 throws 中列出clause。
| 归档时间: |
|
| 查看次数: |
4208 次 |
| 最近记录: |