什么是AssertionError?在哪种情况下,我应该从自己的代码中抛出它?

在“ Effective Java,第二版”书的第2项中,有此代码段,其中的作者希望禁止空初始化对象。

class Example {

private Example() {

throw new AssertionError();

}

}

引发异常的类型使我感到困惑。

我不知道AssertionError是因为缺少更合适的错误还是因为这样而抛出了。

据我了解,当assert语句失败时,框架会抛出此错误。另外,在Javadoc中,它只是写成的

抛出[AssertionError],表明断言失败。

但我看不到这里有违反任何断言(真假陈述)的情况。当然,“您不得实例化此类的一个项目”声明已被违反,但是如果这是其背后的逻辑,那么我们都应该AssertionError到处抛出s,这显然不会发生。

FWIW,我刚扔了一个

new IllegalStateException("Must not instantiate an element of this class")

那有什么问题吗?在那种情况下AssertionError,我应该在自己的代码中扔一个?

抱歉,这只是一个微妙的疑问,但是我在代码中经常使用此模式,所以我想确保自己做的正确。

回答:

当然,“您不能实例化此类的一个项目”声明已被违反,但是如果这是其背后的逻辑,那么我们都应该AssertionErrors到处扔,这显然不会发生。

该代码不是说用户 不应 调用零参数构造函数。断言是说,据程序员所知,他/她使得 调用zero-

args构造函数(在这种情况下,是使它成为零,private而不是从内部Example代码中调用它)。因此,如果发生呼叫,则该声明已被违反,因此AssertionError是适当的。

以上是 什么是AssertionError?在哪种情况下,我应该从自己的代码中抛出它? 的全部内容, 来源链接: utcz.com/qa/436466.html

回到顶部