当我们com.google.common.base.Verify
时,com.google.common.base.Preconditions
的目的是什么?
Verify
类看起来不错,但它有一个@Beta
注释,我应该使用吗?
答案 0 :(得分:9)
Torquestomp的回答是错误的(尽管它的时间可能是正确的,但我不知道)。请参阅gauva的wiki条目:Kinds of conditional failures。
<强>前提条件强>
前置条件检查确保公共方法的调用者符合方法规范的要求。例如,sqrt函数可能只接受非负参数。
<强>验证强>
但是,不要担心太多。来自guava API文档:如果您对自己使用的API缺乏信心,将满足其(实际或隐含)规范,则会使用验证检查。理解这种类型的支票最简单,就像几乎所有方式的断言一样,但必须在生产中保持启用。&#34;
在某些情况下,[Preconditions和Verify]之间的差异可能很微妙。如果不清楚使用哪种方法,不要担心过多;只需选择一些看似合理的东西就可以了。
答案 1 :(得分:7)
区别在于语义。验证用于确保不变量不会发生变化,已设计为执行某项操作的代码实际上正在执行该操作。在精神上:
int x = divide(10, 5);
Verify.verify(x == 2, "X should be 2");
另一方面,如果错误的输入传递给程序的某个部分,通常是从用户到代码,或者从客户端代码传递到另一个库中的代码,预期前提条件会失败。在精神上:
public int divide(int x, int y) {
Preconditions.checkArgument(y != 0, "Can't divide by 0!");
return x / y;
}
至于你是否应该使用@Beta类,这完全取决于你正在构建的应用程序的范围和可预见的生命周期,并且,单独询问,可能会被标记为&#34;主要基于意见的&# 34;问题