java - 检查构造函数/方法参数

标签 java guava

我通常通过 Guava 的 Precondition 方法检查几乎所有构造函数和公共(public)方法参数。私有(private)方法参数通常带有断言。但是,现在我正在考虑替换“内部”前提条件检查,即检查构造函数/工厂方法/一般方法(它们不是公共(public) API/应用程序 API 的一部分)......用断言,你怎么看?也许这样会快一点,因为我有很多支票 ;-)

编辑: 我的意思是公共(public)构造函数和工厂,它们不应该是公共(public) API 的一部分,只是在内部使用,例如:

/**
 * Constructor with both, complete and modifying page.
 * 
 * @param complete
 *          to be used as a base for this container
 * @param modifying
 *          to be used as a base for this container
 */
public NodePageContainer(final @Nonnull NodePage complete,
    final @Nonnull NodePage modifying) {
  assert complete != null;
  assert modifying != null;
  mComplete = complete;
  mModified = modifying;
}

在我有 mComplete = checkNotNull(complete); 之前......但它只是从另一个包中的类调用,甚至不应该是公共(public) API 的一部分。如果 Java 允许降低此类的可见性,那就太好了 ;-)

最佳答案

断言和先决条件不是一回事。

断言检查不变量是否得到遵守:它检查自己的算法是否按预期工作。例如,随机生成器生成的数字始终为正数。一旦您检查一切正常并且没有断言失败,就可以停用它们。

Guava 先决条件检查调用者 是否传递无效参数或不调用不应调用的方法。例如,作为参数传递给 nextInt() 方法的限制大于 0,或者在随机生成器启动后未调用 setSeed()

如果您的目标是强制 API 的调用者遵守其契约(Contract),那么我会使用 Guava 前置条件,而不是断言。

关于java - 检查构造函数/方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12951640/

相关文章:

java - Guava 中 Supplier<T> 的倒数

apache-spark - 从org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits到 Guava 的StopWatch的IllegalAccessError

c# - 具有无效返回值的 Guava 函数<>?

java - 是否有 Java 实用程序可以对两个对象进行深入比较?

java - 为什么 int 类型值不装箱为 Integer

java - 在 Maven/Spring Boot 项目中运行测试时出现 MojoFailureException (NoClassDefFounderror)

java - 类不是抽象的,不会重写 KeyListener 中的抽象方法 keyReleased(KeyEvent)

java - java中如何定义子类(基本继承)

java - 为什么 Google 的 Multimap 的 entries() 方法不返回键/集合对?

guava - 连接不可变列表