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

时间:2011-03-14 08:23:49

标签: java exception visibility runtime-error invariants

我希望在我的类不变量无效的情况下抛出运行时异常。由于这是一个编程错误(类似于NullPointerException),客户端不应该捕获该异常。

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

class Foo
{
    // ...

    private static class InvariantsViolated
    {
        // ...
    }
}

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

我认为,为了throw任何内容,该对象必须实现Throwable接口,这意味着它必须是ErrorException 。由于您不希望客户端永远捕获该事件,因此您应该使用Error。来自Error documentation

  

错误是Throwable的子类   这表明存在严重的问题   合理的申请不应该尝试   赶上。

这样你可以避免一些程序员倾向于使用的可怕的Exception一切 - 这些程序员大多数时候甚至根本不考虑捕获Error ...