我正在修改一些代码,并且我看到一致使用“验证”来进行错误检查。
Validate.notNull(x, "x cannot be empty")
和 if(null != x){...}
之间有什么区别?其中一个相对于另一个有什么优势?
编辑:我正在使用 org.apache.commons.lang.Validate
编辑:假设您指的是 org.apache.commons.lang.Validate
第一个说用空参数调用方法是完全非法的,这是使用该方法的程序员的编码错误。
第二个只是说根据 x 是否为 null 会有不同的行为。
如果你真的这样做的话,它就变成了一个可读性问题:
if(null != x)
{
//...
} else {
throw new IllegalArgumentException( "x cannot be empty");
}
如果要的话,正文有多长?为什么非法调用方法的结果与检查是否非法调用物理分离?一旦您添加更多具有各种不同法律状态的参数,其他人就很难理解。如果您从一开始就明确拒绝所有已知绝对非法的调用,那么对其他程序员会更加友好。
Validate
不属于Java API,您可能正在使用框架或其他人的类来进行验证。
关于好处,这取决于
Validate.notNull
在内部做什么,希望它与其名称一致,并且只做所说的事情,检查值是否不为空。一个好处是它允许您指定错误消息,这样您就可以减少代码的冗长性,但这又取决于它对该消息的处理方式,它可能会将它们添加到消息堆栈中或引发未经检查的异常。
验证在某些一般情况下是很好的。它的缺点是,如果您需要提供自定义消息(连接动态数据),即使不需要该消息,它也会每次运行。
第二种方法更好,因为只有在需要时才会评估字符串连接。