dev*_*per 23 java assert public-method
为什么我们不能将断言用于公共方法?
我在某处读过
"断言在公共方法中是不合适的,因为该方法保证它总是强制执行参数检查.公共方法必须检查其参数是否启用断言.此外,断言构造不会抛出指定类型的异常.它只能抛出一个
AssertionError".
那么,它也不适用于私人方法吗?
我没有清楚地理解上述陈述
Pet*_*rey 26
重要的区别在于您是否认为不正确的值是结果
a)应该在代码中修复的编程错误.
b)输入错误,在代码中无法防止,而是需要在运行时处理.
对于第一种情况,您应该使用断言,因为程序代码需要修复.如果是后一种情况,则应使用适当的运行时或检查异常.
IMHO断言用于检测编程错误,而不是用户/外部输入.当你有一个不被外部输入调用的公共方法时,作者可能会将公共方法混淆为外部输入.
我会使用断言来检查参数以检测编程错误.恕我直言,这通常是他们最好的用途.相比之下,私有方法只能由同一个类中的代码调用,您应该期望它们能够很好地进行单元测试并限制可能的访问/使用.
我发现你更有可能通过公共接口出现编程错误,因为不同的人做出不同的假设(断言是记录和检查假设的好方法)内部检查没有你期望同一个程序员有权访问内部代码,如果没有编写整个内部代码库.
z7s*_*g Ѫ 16
由于以下原因,断言不应用于检查公共方法中的参数:
例:
/**
* @throws ArithmeticException if divisor is zero
*/
public void int divide(int divisor) {
if (divisor == 0) {
throw new ArithmeticException("Cannot divide by zero");
}
...
}
Run Code Online (Sandbox Code Playgroud)
如果你在这里使用断言它可以被关闭,它会抛出一个AssertionFailedException,这是无益的,没有信息.