【发布时间】:2018-11-02 03:57:59
【问题描述】:
我有以下代码:
public User getUserById(Long id) {
checkUserExists(id);
return repo.findOne(id);
}
private void checkUserExists(Long id) {
if (id == null || !repo.exists(id)) {
throw new NoUserFoundException("No User exists with id: " +id);
}
}
根据Oracle:
“如果未经检查的异常可以通过方法或构造函数的执行抛出并传播到方法或构造函数边界之外,则不需要在方法或构造函数的 throws 子句中声明它们。”
我是否必须在 JavaDoc 中描述异常(没有 @throws 子句,但只描述?)在 JavaDoc 中描述这种未经检查的异常的最佳方式是什么?
【问题讨论】:
-
如果使用你的函数的人被告知它可能会抛出这个异常,这会有用吗?这就是 javadocs 的用途。您可以将
@throws或@exception用于未检查的异常以及已检查的异常。 -
Oracle 声明它不需要在此处进行描述。它没有被禁止或气馁。你仍然可以这样做,我认为这是正确的做法。
-
这里是一个来自 JDK 的例子:docs.oracle.com/javase/7/docs/api/java/lang/…
-
@Michael 我希望
doesUserExist返回一个布尔值。我希望checkUserExists会引发异常。 -
我同意赫尔伍德的观点。但我认为创建返回信息而不是引发异常来通知调用者的方法是一个更好的设计。所以我认为拥有一个返回布尔值的函数
doesUserExists()将是一个更好的设计。例外是通知异常行为/数据,在您的情况下,如果用户存在,您会创建一个函数来检查,这意味着您希望有时它不存在,因此没有用户是不正常的。所以我会返回一个布尔值而不是异常。如果调用者期望用户存在,调用者可以抛出异常