我通常通过Guava的Precondition方法检查几乎所有的构造函数和公共方法参数.私有方法参数通常带有断言.但是,现在我正在考虑替换"内部"前置条件检查,即检查构造函数/工厂方法/一般方法(不属于公共API /应用程序API)...使用断言,您如何看待?也许这种方式有点快,因为我有很多支票;-)
编辑:我的意思是公共构造函数和工厂,它们不应该是公共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;
}
Run Code Online (Sandbox Code Playgroud)
在我之前mComplete = checkNotNull(complete);...但它只是从另一个包中的类调用,甚至不应该成为公共API的一部分.如果Java允许降低此类的可见性,那将会很棒;-)
断言和先决条件不是一回事.
断言检查不变量是否受到尊重:它检查您自己的算法是否按预期工作.例如,随机生成器生成的数字始终为正数.一旦检查一切正常并且没有断言失败,就可以取消激活它们.
Guava前置条件检查调用者是否未传递无效参数或不调用不应调用的方法.例如,作为参数传递给nextInt()方法的限制大于0,或者setSeed()在随机生成器启动后不调用.
如果您的目标是强制API的调用者尊重其合同,那么我将使用Guava前置条件,而不是断言.
| 归档时间: |
|
| 查看次数: |
446 次 |
| 最近记录: |