Guava 验证的目的是什么?

问题描述 投票:0回答:2

当我们拥有

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

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

java guava
2个回答
10
投票

区别在于语义。验证用于确保不变量不会改变,被设计用于执行某件事的代码实际上正在执行该操作。精神上:

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 类,这完全取决于您正在构建的应用程序的范围和可预见的生命周期,并且单独询问,可能会被标记为“主要基于意见”的问题。


9
投票

Torquestomp 的答案是错误的(尽管它在当时可能是正确的,但我不知道)。请参阅 Guava 的 wiki 条目:各种条件失败

前提条件

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

验证

当您对您使用的 API 是否满足其(真实的或隐含的)规范缺乏高度信心时,就会使用验证检查。最容易将这种类型的检查理解为“几乎在所有方面都像断言,但必须在生产中保持启用状态。”

不过别太担心。来自Guava API文档

在某些情况下,[先决条件和验证之间]的差异可能很微妙。当不清楚使用哪种方法时,不用担心太多;只要选择一些看起来合理的东西就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.