番石榴验证的目的是什么?

时间:2014-06-15 06:32:52

标签: java guava

当我们com.google.common.base.Verify时,com.google.common.base.Preconditions的目的是什么?

Verify类看起来不错,但它有一个@Beta注释,我应该使用吗?

2 个答案:

答案 0 :(得分:9)

Torquestomp的回答是错误的(尽管它的时间可能是正确的,但我不知道)。请参阅gauva的wiki条目:Kinds of conditional failures

<强>前提条件

  

前置条件检查确保公共方法的调用者符合方法规范的要求。例如,sqrt函数可能只接受非负参数。

<强>验证

  

如果您对自己使用的API缺乏信心,将满足其(实际或隐含)规范,则会使用验证检查。理解这种类型的支票最简单,就像几乎所有方式的断言一样,但必须在生产中保持启用。&#34;

但是,不要担心太多。来自guava API文档:

  

在某些情况下,[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;问题