LocalDate.format(DateTimeFormatter formatter)在方法签名中未声明“抛出”

时间:2018-10-23 05:08:37

标签: java java-8 exception-handling localdate

我正在遍历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);
}
  1. 这是否是声明引发异常的方法的正确方法(我希望方法签名中的 throws 可以使客户端正确处理异常,但这不会给客户端提供任何线索)除非正在读取javadoc,否则异常)?

请我知道我是否错过了一些东西来正确理解这一点?

1 个答案:

答案 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);
    }
}

我相信这确实是良好的异常文档的一个示例(即使您没有明确地将它们扔入所讨论的方法中,也应该检查或不检查这些异常)