Java:关于断言行为的问题

时间:2011-03-22 09:20:50

标签: java assert

我有这段代码

import java.util.ArrayList;
import java.util.List;

public class AssertTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        assert(list.add("test")); //<-- adds an element

        System.out.println(list.size());
    }
}

输出:

0 

为什么输出列表为空?断言如何表现在这里? 提前谢谢!

6 个答案:

答案 0 :(得分:5)

您应该使用-ea标志启用断言...例如;

java -ea -cp . AssertTest

同样使用断言是副作用最糟糕的地方..

答案 1 :(得分:5)

永远不要断言任何有副作用的东西。如果在未启用断言的情况下运行(使用-ea启用),则不会执行list.add("test")

这是一个好习惯,永远不要断言任何东西,除了假,如下:

if (!list.add("test")) {
  assert false;
  // Handle the problem
}

答案 2 :(得分:0)

需要启用断言。使用-ea开关启用它们。

the Java application launcher docs

答案 3 :(得分:0)

你必须启用断言。即以 java -ea AssertTest

运行

答案 4 :(得分:0)

附带您的问题 - 断言不应包含正确操作程序所需的代码,因为这会导致正确的操作取决于是否启用了断言。

答案 5 :(得分:0)

断言方法,用于检查布尔表达式是true还是false。如果表达式的计算结果为true,则表示没有效果。但是如果它的计算结果为false,则assert方法打印堆栈跟踪并且程序中止。在此示例实现中,使用字符串的第二个参数,以便可以打印错误原因。