首页 > 解决方案 > 自定义例外,多少算太多?

问题描述

我一直想知道我应该有多少异常,我看到其他帖子说有多个异常很好,它可以提高代码的可读性并更好地理解错误(如果有一个)。

现在我有 5 个异常,检查 UserNotFoundException 和 AccountExpenseNotFoundException 基本上这两个异常是相同的,但指的是不同的实体。

例外示例

这是一个不好的做法吗?我应该像 EntityNotFound 这样的例外来处理这个问题吗?

标签: javaspring-bootexception

解决方案


不,这很好。一个缺点是您最终会编写如下内容:

try {
   bookkeeperthingie();
} catch (AccountExpenseAlreadyExistsException |
   AccountExpenseNotFoundException | UsernameOrPasswordInvalidException |
   Blablabla | Morebla e) {
}

为避免这种情况,请确保您的异常遵循层次结构。例如,您可能有:

public class BookkeepingException extends Exception {
    public BookkeepingException(String msg) { super(msg); }
    public BookkeepingException(String msg, Throwable cause) { super(msg, cause); }
}

public class AccountExpenseAlreadyExistsException extends BookkeepingException { ... }

等等。如果您发现您的 API 用户想要捕获任何类型的“未找到簿记事项”异常特别合理,请将其设为层次结构中的一个级别(但这对我来说听起来不正确)。

现在你可以写:

try {
    bookkeepingthingie();
} catch (BookkeepingException e) {
}

如果您不特别关心出了什么问题,如果您这样做了,就抓住一个更具体的问题,或者甚至将它们组合起来(如果没有找到,请执行此操作。对于任何其他簿记问题,请执行此操作 - 您可以执行此操作具有层次结构的;首先捕获更具体的,然后是一般的)。


推荐阅读