控制Java断言 - 最佳实践

mti*_*cal 5 java properties system assertions

我希望计算密集度较低的断言始终保持开启并禁用更高计算密集度的断言.当我们的代码转移到生产的实际使用方法可能是(根据实用主义程序员,这是处理断言建议的方式).

控制断言的最佳方法是什么?(注意,我已经使用"-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;
}
Run Code Online (Sandbox Code Playgroud)

是否最好使用系统属性来控制变量?如果是这种情况,是否可以为整个项目而不仅仅是特定类(在Eclipse中)设置系统属性?

使用"常量"类中定义的常量变量是一个更好的主意吗?

还有其他我不想的方法吗?

提前致谢.

mer*_*ike 2

断言语句的定义特征是它可以被关闭,所以我只会将它用于不应该总是运行的断言。对于始终运行的断言,我会这样做:

if (results.size() != sizeOfList)
    throw new AssertionError("Results-list size does not equal requested size.");
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过 JVM 选项启用/禁用昂贵的断言-ea