我正在遍历LocalDate API的Java源代码,发现这些方法缺少 throws 声明。但是,javadoc明确提到该方法可能引发DateTimeException。以下是Java 8中LocalDate API的来源。
/**
* Formats this date using the specified formatter.
* <p>
* This date will be passed to the formatter to produce a string.
*
* @param formatter the formatter to use, not null
* @return the formatted date string, not null
* @throws DateTimeException if an error occurs during printing
*/
@Override // override for Javadoc and performance
public String format(DateTimeFormatter formatter) {
Objects.requireNonNull(formatter, "formatter");
return formatter.format(this);
}
请我知道我是否错过了一些东西来正确理解这一点?
答案 0 :(得分:0)
DateTimeException
是未经检查的异常,因此不必将其声明为方法。
为什么LocalDate#format
声明它?因为它可以被方法抛出,所以它本身将执行委托给它。在调用链之后,我们看到DateTimeFormatter.formatTo(TemporalAccessor, Appendable)
是执行实际工作的方法,并且抛出异常;并且没有任何中间方法可以捕获/处理它。
public void formatTo(TemporalAccessor temporal, Appendable appendable) {
...
try {
...
} catch (IOException ex) {
throw new DateTimeException(ex.getMessage(), ex);
}
}
我相信这确实是良好的异常文档的一个示例(即使您没有明确地将它们扔入所讨论的方法中,也应该检查或不检查这些异常)