在“Effective Java,2nd edition”一书的第2部分,有这段代码,其中作者想要禁止对象的空初始化。什么是AssertionError?在哪种情况下,我应该从自己的代码中抛出它?
class Example {
private Example() {
throw new AssertionError();
}
}
抛出异常的类型是什么让我困惑在这里。
我不明白AssertionError
是否因为缺少更适合的错误或因为它应该是这样。
据我所知,当assert
语句失败时,框架抛出此错误。另外,在javadoc中,它只是写成
[An AssertionError is]指出断言失败。
但是我没有看到在这里违反了任何断言(真假表)。 当然,“你不应该实例化这个类的一个项目”声明已被违反,但如果这是背后的逻辑,那么我们应该全都扔掉AssertionError
,这显然不是什么情况。
FWIW,我刚抛出
new IllegalStateException("Must not instantiate an element of this class")
。有什么不好呢?在这种情况下,我应该在自己的代码中抛出一个AssertionError
?
对不起,如果这只是一个微妙的疑问,但我在我的代码中使用这种模式很多,我想确保我做的是正确的事情。
“断言”不仅仅意味着“断言陈述”。 – immibis
番石榴有一个[有用的参考](https://github.com/google/guava/wiki/ConditionalFailuresExplained)比较了几种不同的运行时异常用例和'AssertionError'。我鼓励任何对此模式感到惊讶的人阅读本页面。 – dimo414