在类中定义自定义异常的Java是不是很糟糕?

Jos*_*itt 4 java exception

我有一个有方法的类.该方法可能会失败,我想抛出异常.在函数抛出异常的类的命名空间中定义异常类是不是很糟糕?我还没有看到很多这方面的例子,但似乎是"正确"(即OO)的方式呢?我有理由避免这种模式并在自己的文件中定义每个自定义异常吗?

public class Foo
{
    void bar() {
        // do something and throw BarException if something bad happens
    }

    public static class BarException extends Exception {
        // rest of class definition
    }
}
Run Code Online (Sandbox Code Playgroud)

rge*_*man 7

我认为这取决于Exception你创造的可能范围.如果它只需要Foo,并且只有Foo永远,那么将它创建为嵌套类将是好的.

只要确保调用的内容有意义Bar:

catch (Foo.BarException e)
Run Code Online (Sandbox Code Playgroud)

代替

catch (BarException e)
Run Code Online (Sandbox Code Playgroud)

否则,将其创建为自己的独立类.

至于命名空间,Java类用于命名空间类,但通常在Java包中用于命名空间类.如果主类和另一个类之间存在非常高的耦合,我只会使用嵌套类.