什么是AssertionError? 在这种情况下,我应该从我自己的代码中抛出?
在“Effective Java,2nd edition”这本书的第2部分,有这段代码,其中作者想要禁止对象的空初始化。
class Example { private Example() { throw new AssertionError(); } }
抛出的exception的types,在这里让我困惑。
我不明白,如果AssertionError
是由于缺less更适合的错误或因为它应该是这样的抛出。
据我所知,当assert
语句失败时,框架抛出这个错误。 另外,在javadoc它只是写
[AssertionError is]抛出以表示断言失败。
但是我没有看到这里被触犯的任何断言(真假陈述)。 当然“你不应该实例化这个类的一个项目”这个语句已经被违反了,但是如果这是背后的逻辑的话,那么我们都应该抛出AssertionError
的东西,那显然不是什么情况。
FWIW,我刚刚扔了一个
new IllegalStateException("Must not instantiate an element of this class")
有什么问题吗? 在这种情况下,我应该在自己的代码中抛出一个AssertionError
?
对不起,如果这只是一个微妙的怀疑,但我在我的代码中使用这种模式很多,我想确保我做的是正确的事情。
当然,“你不应该实例化这个类的一个项目”这个语句已经被违反了,但是如果这是背后的逻辑,那么我们都应该抛出
AssertionErrors
,这显然不是什么情况。
该代码并不是说用户不应该调用零参数构造函数。 有人断言说,就程序员所知,他/她已经不可能调用零参数构造函数(在这种情况下,通过将其设置为private
而不是在Example
的代码中调用它)。 所以如果发生一个调用,那个断言就被违反了,所以AssertionError
是合适的。
AssertionError
的含义是开发人员认为不可能发生的事情。
所以如果一个AssertionError
被抛出,这是一个编程错误的明显迹象。
一个断言当说:“你已经写了一个不应该不惜代价地执行的代码,因为根据你的逻辑,它不应该发生,但是如果它发生,然后抛出AssertionError,你不抓住它。 在这种情况下,你会抛出Assertion错误。
new IllegalStateException("Must not instantiate an element of this class")' // Is an Exception not error.
注意:声明错误出现在java.lang.Error中,并且错误不意味着被捕获。
AssertionError是一个未经检查的exception,由程序员或API开发人员明确指出assert语句失败。
assert(x>10);
输出:
AssertionError
如果x不大于10,那么你会得到运行exceptionAssertionError。
- 什么时候应该使用Throwable而不是新的Exception?
- asynchronousnode.js调用中的error handling
- 良好的VBAerror handling模式
- 获取exception“IllegalStateException:不能执行此操作后onSaveInstanceState”
- C ++是否支持“终于”阻止? (我听说过这个“RAII”是什么?)
- 我如何解决android.os.NetworkOnMainThreadException?
- 如果在使用语句中发生exception,该对象是否仍然被处置?
- 为什么NotImplementedException存在?
- 内存exception的C#Image.Clone