为什么?"始终将用户定义的异常声明为最终"

yus*_*suf 8 java exception

我分析了我正在使用Java源代码分析器的代码.其中一个警告是"始终将用户定义的异常声明为最终".还有许多其他警告没有多大意义,但这个让我有点困惑.

我正在研究一个框架,我有一个根通用异常(比如FrameworkGenericException),对于其他异常,我只是从根异常中导出它们.所以我有一个框架的例外层次结构.我可能会扩展层次结构,但我认为这个警告告诉我不要有这样的层次结构,而是单独定义它们.那么我应该走哪条路,你的评论是什么?

Mal*_*olm 4

这对他们来说可能是标准做法:如果不应该继承类,则将类声明为final,并且他们可能认为所有异常都不会从中扩展。

但是,就您的情况而言,我认为制定一个通用例外并从中扩展所有其他例外是​​一件好事。说,你有:

public void frameworkMethod() throws IllegalDataException, InvalidCommandException;
Run Code Online (Sandbox Code Playgroud)

其中这些异常是 的子类FrameworkException。然后你可以更容易地处理异常。

try {
    frameworkMethod();
} catch (FrameworkException ex) {
    logger.log(Level.SEVERE, "An exception occured!", ex);

    if (ex instanceof IllegalDataException) {
        // Do something to recover
    } else if (ex instanceof InvalidCommandException) {
        //Inform the user
    } //And so on...
}
Run Code Online (Sandbox Code Playgroud)

所以我想说,你正在做正确的事情,你的程序的架构将更容易使用。