验证私有帮助器方法的参数

时间:2015-10-07 06:17:59

标签: java methods assert

我正在阅读J. Bloch的Effective Java,现在我正在讨论验证方法参数的部分。他说以下内容:

  

对于未导出的方法,您作为包作者控制   调用方法的情况,所以你可以和   应该确保只传入有效的参数值。   因此,非公开方法通常应检查其参数   使用断言

这是本书的例子:

// Private helper function for a recursive sort
private  static void sort(long a[], int offset, int length) {
    assert a != null;
    assert offset >= 0 && offset <= a.length;
    assert length >= 0 && length <= a.length - offset;
    // Do the computation
}

我没有看到强调句子如何确保参数值有效。此外,我咨询了JLS 14.10并发现了这个:

  

启用或禁用断言。 [...] 如果断言   被禁用,断言的执行没有任何效果

我从来没有在代码中使用assert语句,所以对我来说它似乎容易出错,因为如果它发生断言被禁用,它可能会导致几乎没有检测到的错误出现。他还说了这个:

难道你不清楚他说的是什么意思吗?

我的意思是,为什么我们不将assert用于公共方法呢?

1 个答案:

答案 0 :(得分:2)

我认为断言的主要用法应该是检测程序中的错误,以便能够修复它们。

需要注意的是,他们可以启用禁用。如果您正在使用它们来验证参数,那么不要希望public方法忽略断言 - public方法的参数检查应该始终完成(当然,如果需要)。

另外需要注意的是,断言不能提供信息,因断言错误而可以检索的消息是:

AssertionFailedException ...

这没有用,比如抛出信息异常,表明错误是什么以及为什么,这对调用者非常有帮助。