我想抛出一个运行时异常,以防我的类不变量失效。由于这是一个编程错误(类似于NullPointerException),客户端不应该捕获该异常。抛出一个私人异常是否有意义?
应该将异常类声明为private还是public(或其他)?
class Foo
{
// ...
private static class InvariantsViolated
{
// ...
}
}
定制运行时异常和可见性是否有任何指导原则?
我想抛出一个运行时异常,以防我的类不变量失效。由于这是一个编程错误(类似于NullPointerException),客户端不应该捕获该异常。抛出一个私人异常是否有意义?
应该将异常类声明为private还是public(或其他)?
class Foo
{
// ...
private static class InvariantsViolated
{
// ...
}
}
定制运行时异常和可见性是否有任何指导原则?
您可能会考虑使用现有的异常,除非您希望以其他方式捕获此异常。如果预计不会被捕获,我不认为需要定制异常。一些例外,你可以重新使用
如果您想要自定义异常,可以考虑扩展这些异常,或使用扩展这些异常的异常之一。
我相信,为了throw
什么,该对象必须实现Throwable
接口,这意味着它必须是一个要么或Error
的Exception
。由于您不希望客户发现有史以来,您应该使用Error
。从Error
documentation:
一个错误是Throwable的 一个子类,表示严重的问题,一个 合理应用程序不应该试图 赶上。
这样,你可以避免可怕Exception
追赶,府一些程序员倾向于使用 - 大多数时候,这些程序员甚至不考虑捕获的Error
在所有...
这就是为什么我们在应用中使用'Throwable' catch-alls ;-) – 2011-03-14 08:40:19
我不会扔手动声明AssertionError,但使用断言来检查不变式是件好事。 – atamanroman 2011-03-14 08:30:05
'assert'需要打开才能正常工作。您可能希望此检查始终发生。 – 2011-03-14 08:32:41
事实上,我曾考虑过'IllegalStateException',但其文档中提到“信号表明某个方法在非法或不适当的时间被调用。”事实并非如此。 – fredoverflow 2011-03-14 08:42:16