抛出私有异常是否有意义?

fre*_*low 5 java visibility runtime-error exception invariants

我想抛出一个运行时异常,以防我的类不变式无效。由于这是编程错误(类似于NullPointerException),因此客户端不应捕获该异常。

应该将异常类声明为私有还是公共(或其他)?

class Foo
{
    // ...

    private static class InvariantsViolated
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有关于自定义运行时异常和可见性的准则?

Pet*_*rey 3

您可以考虑使用现有的异常,除非您希望以不同的方式捕获该异常。如果预计不会捕获它,我认为不需要自定义异常。您可以重复使用一些例外情况

  • AssertionError - 对我来说,这意味着存在不确定类型的不可恢复的编程错误。
  • IllegalArgumentException - 对我来说,这意味着只有该方法的参数无效。
  • IllegalStateException - 对我来说,这意味着对象的状态(例如值的组合)对此操作无效。

如果您想要自定义异常,您可以考虑扩展这些异常,或使用扩展这些异常的异常之一。