![](/img/trans.png)
[英]On upgrading Guava to the latest 23.5 getting NoSuchMethodError for Preconditions.checkArgument
[英]Guava preconditions checkNull, checkArgument
我想检查基类上的前提条件,以便知道子类型将始终使用有效的构造函数参数。
让我们以一个构造器为例:
在这种情况下,如何最好地使用番石榴前提条件方法?
在这样的模拟示例中:(这是人为的!)
protected AbstractException(String errorMessage, Throwable errorCause) {
super(errorMessage, errorCause);
checkNotNull(errorMessage,
ErrorMessage.MethodArgument.CANNOT_BE_NULL_CHECK, "errorMessage");
checkArgument(!errorMessage.isEmpty(),
ErrorMessage.MethodArgument.CANNOT_BE_EMPTY_STRING_CHECK,
"errorMessage");
checkNotNull(errorCause, ErrorMessage.MethodArgument.CANNOT_BE_NULL_CHECK,
"errorCause");
}
我最终在检查参数之前调用了super
,因为对super
的调用需要是方法的第一行,尽管我可以做super(checkNoNull(errorMessage))
,但是我不能使用checkArgument
进行相同的包装,因为这会返回void
。 因此,难题是:
checkStringNotNullAndNotEmpty()
一样“分组”检查 我使用外观怪异的ErrorMessage.MethodArgument.CANNOT_BE_NULL_CHECK,因为默认throw
不包含错误消息,因此从测试方面,我无法将其识别为参数验证失败,而不是“任何” NPE?
我做错了吗?
这本来应该是一个评论,但是太长了。
super
是无害的。 更重要的是:您抛出的异常可能不如没有所有检查的异常。 假设用户提供了原因,但没有消息。 您认为这很糟糕,但是您可以使用没有任何原因的NPE替换它。 更糟
查看Guava的Preconditions.format
(私有包)。 他们可以先检查正确数量的参数,但不能。 您可以提供太少或太多,这是一个错误,但忽略它是处理它的最佳方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.