我希望计算密集度较低的断言始终保持打开状态,并禁用计算密集型较高的断言。 一个实际的用例可能是我们将代码移动到生产环境(根据 Pragmatic Programmer 的说法,这是处理断言的建议方法)。
控制断言的最佳方法是什么? (注意,我已经使用"-ea"在 VM 变量中启用了断言)。
一个简单的例子:
/**
*
* @precondition sizeOfList >= 2
*/
private ArrayList<Integer> createSortedList(int sizeOfList){
ArrayList<Integer> results = new ArrayList<Integer>();
for(int i = 0; i<sizeOfList; i++){
<algorithm to add sorted numbers to array>
}
if(<some_flag>)
assert results.get(0) < results.get(1) : "Results are not sorted.";
assert results.size() == sizeOfList : "Results-list size does not equal requested size.";
return results;
}
是否最好使用系统属性来控制变量? 如果是这种情况,是否可以为整个项目设置系统属性,而不仅仅是为特定类(在 Eclipse 中)设置系统属性?
使用在"常量"类中定义的常量变量是否更好?
还有其他我没有想到的方法吗?
提前谢谢。
assert 语句的定义功能是它可以被关闭,所以我只会将其用于不应该总是运行的断言。对于始终运行的断言,我会执行以下操作:
if (results.size() != sizeOfList)
throw new AssertionError("Results-list size does not equal requested size.");
然后,您可以通过 -ea
JVM 选项启用/禁用昂贵的断言。