对所有事情都有特定的例外是一个好习惯吗?或者重用一些更抽象的异常更好?

ras*_*ayu 6 java exception-handling

我正在处理一个项目,我为每个可能的异常情况编写了一个Exception.关键是我发现它更"可读",但我得到了大量不同的异常.

这样做是否被认为是一种好习惯?或者,为了没有这么多,我应该将异常写得更抽象一点吗?

非常感谢你的时间.

Ste*_*n C 5

哪个更好取决于代码捕获特定异常的可能性。如果您仅可能捕获(或以其他方式进行区分)更一般的(超类)异常,那么拥有许多更具体的(子类)异常将不会有太大的作用。在这种情况下,最好定义较少的异常,并使用异常消息来表达发生错误的详细信息。

另一方面,如果已经存在特定的例外,则使用它们是有意义的。IMO,只是丢东西java.lang.Exception还是java.lang.RuntimeException懒惰。

跟进

好吧,我总是捕获特定的异常,但事实是,在其他“捕获”中,我还使用了类似的特定异常(例如,它们可以引用“数据库”,但它们并不相同)。因此,问题是执行“ DatabaseException”并使用它(而不是例如“ DatabaseConnectionException”和“ DatabaseDataException”)是否应该是一件好事,它更容易阅读,但是最后我得到了数百万个显式异常。

如果您的代码经常如下所示:

try {
    ... 
} catch (DatabaseConnectionException ex) {
    // do something
} catch (DatabaseDataException ex) {
    // do same thing
} catch (DatabaseTangoException ex) {
    // do same thing
}
Run Code Online (Sandbox Code Playgroud)

...那么您的细粒度异常无济于事。但是,如果看起来像这样:

try {
    ... 
} catch (DatabaseConnectionException ex) {
    // do something
} catch (DatabaseDataException ex) {
    // do something completely different
} catch (DatabaseTangoException ex) {
    // do something totally extraordinary
}
Run Code Online (Sandbox Code Playgroud)

...那么也许您的细粒度异常对您有用。而且,如果您将这三个异常声明为的子类DatabaseDataException,则可以根据情况一起或单独处理这些情况。

的确,您可以根据自己的申请来做出自己的判断。