为什么断言不用于部署

sar*_*nan 4 java assertions

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

Pét*_*rök 5

默认情况下不启用断言,您必须将-ea参数传递给JVM才能启用它们.因此,在许多情况下,部署中可能只是一个简单的遗漏.其他原因可能是性能(我没有证据表明断言会明显减慢执行速度),或者正确的错误处理,即生产系统可能被认为不合适AssertionError.

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