4

为什么断言通常不用于部署?我研究了断言公共方法参数是不合适的..但是断言私有方法参数在部署中是合适的..为什么?

4

3 回答 3

5

默认情况下不启用断言,您必须将-ea参数传递给 JVM 以启用它们。所以在很多情况下,可能只是部署中的一个简单的疏漏。其他原因可能是性能(尽管我没有证据表明断言会显着减慢执行速度),或适当的错误处理,即生产系统可能认为不适合将其投入使用AssertionError

断言私有方法参数是合适的,因为您应该完全控制传递给它们的参数。公共方法 OTOH 是从外部调用的,因此您可能无法控制传递的具体参数,因此最好进行显式参数检查并适当地处理无效参数(例如,通过抛出合适的运行时异常,例如IllegalArgumentException),或者null 引用,让 JVM 抛出一个NullPointerException.

于 2011-03-02T12:44:00.663 回答
1

默认情况下禁用断言,因为开销使它们仅在开发环境中可接受,因为它们确实有助于发现错误。在所有公共方法中,无论如何都应该检查输入,而不依赖于启用的断言(-ea JVM 选项),这就是它们(或应该)无用的原因。

另一方面,对于您的私有方法,您可以完全控制所有方法调用,因此您可以确保提供正确的参数,但最好还是在内部断言,以便能够尽早检测到任何可能的错误可能的。

于 2011-03-02T12:46:13.670 回答
0

根据开创性的书,务实的程序员,断言默认是关闭的,因为编译器编写者等已经传播了这样的想法,即性能开销是不可接受的,它们只在调试代码时才重要。

事实上,建议您保留断言,因为您的测试可能无法找到所有错误,并且因为在发布时,混沌猴子可能随时罢工。只有在遇到性能问题时才应关闭断言。

并且还建议您应该编写自己的断言版本,当它失败时不一定调用退出。

于 2011-06-16T07:04:52.353 回答