Don't Use Java Assertions

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

在Java中,基本上有两种验证情况的方法,以及在发生意外情况时进行投诉。它们要么是异常,要么是断言。从技术上讲,它们几乎是相同的,但有些细微的差别。我相信在所有情况下,异常是正确的选择,而断言则不应该使用。下面是原因。

让我们看一下当触发断言时会发生什么。假设这是我们的代码:

将此代码保存到 Main.java 并编译:

Then run it:

$ java Main
Hello, world!

这个断言没有被触发。它被忽略了。现在使用-enableassertions标志来运行它。

这是异常和断言之间的第一个区别。异常总是会被抛出,而断言默认情况下是禁用的。在测试期间应该打开断言,在生产环境中应该关闭断言。断言会引发运行时异常AssertionError。但是等一下,它不是RuntimeException。它继承自Error类,该类又继承自Throwable。这是第二个区别。我不知道还有其他区别。

我建议永远不要使用断言。我坚决支持快速失败的方法。我认为错误必须不仅在测试期间可见,而且在生产环境中也必须可见。此外,我认为在生产环境中使错误可见非常重要,如果你想要一个高质量的产品。

因此,不要使用断言。它们只是Java(和其他一些语言)中的一个有缺陷且已过时的功能。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-27 at 13:32

sixnines availability badge   GitHub stars