6

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

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

class Foo
{
    // ...

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

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

4

2 回答 2

3

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

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

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

于 2011-03-14T08:28:26.610 回答
1

我相信,为了做throw任何事情,该对象必须实现Throwable接口,这意味着它必须是 anError或 an Exception。由于您不希望您的客户永远捕获该事件,因此您可能应该使用Error. 从Error文档中:

Error 是 Throwable 的子类,表示合理的应用程序不应尝试捕获的严重问题。

这样你可以避免一些程序员倾向于使用的可怕Exception的包罗万象 - 大多数时候这些程序员甚至根本没有考虑捕捉一个Error......

于 2011-03-14T08:30:58.453 回答