Java-Guava前提条件checkNull,checkArgument
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java-Guava前提条件checkNull,checkArgument,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2020字,纯文字阅读大概需要3分钟。
内容图文
![Java-Guava前提条件checkNull,checkArgument](/upload/InfoBanner/zyjiaocheng/693/e4470462b8d9438d8012f06993632a6b.jpg)
我想检查基类上的前提条件,以便知道子类型将始终使用有效的构造函数参数.
让我们以一个构造器为例:
>接受2个或更多参数
>接受不同类型的参数
>对于一个参数,它将执行多项检查(例如,字符串不为null且不为空)
在这种情况下,如何最好地使用番石榴前提条件方法?
在这样的模拟示例中:(这是人为的!)
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()一样对检查进行“分组”
>我是否应该考虑与匹配器框架集成? (hamcrest,fest断言…)
我使用外观怪异的ErrorMessage.MethodArgument.CANNOT_BE_NULL_CHECK,因为默认抛出不包含错误消息,因此从测试方面,我无法将其识别为参数验证失败,而不是“任何” NPE?
我做错了吗?
解决方法:
这本来应该是一个评论,但是太长了.
>在测试之前调用super是无害的,只要supertor不会做它本不应该做的事情.
>可以通过静态构建器方法来防止,您不需要构建器.但这不值得.
>我怀疑分组测试通常很有用;如果是这样,那么已经有这样的方法了.但是,如果您需要两次以上这样的具体事情,请自己编写;如果经常出现,请将其作为RFE报告给番石榴团队.
>我很确定,匹配者在这里是一个过大的杀伤力,因为您只是在创建一个例外,即,很少使用的东西(我希望如此).由于您的测试仅是运行时,因此并不能真正帮助您捕获错误.如果可以静态地确保“正确地”构造的异常,那将是很好的,但是在纯Java中这是不可能的.
更重要的是:您抛出的异常可能不如没有所有检查的异常.假设用户提供了原因,但没有消息.您认为这很糟糕,但是您可以使用没有任何原因的NPE替换它.更糟
查看Guava的Preconditions.format(私有包).他们可以先检查正确数量的参数,但不能.您可以提供太少或太多,这是一个错误,但忽略它是处理它的最佳方法.
内容总结
以上是互联网集市为您收集整理的Java-Guava前提条件checkNull,checkArgument全部内容,希望文章能够帮你解决Java-Guava前提条件checkNull,checkArgument所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。