Java:断言行为问题

Java:断言行为问题,java,assert,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 el

我有这个代码片段

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());
    }
}
为什么输出列表是空的?assert在这里表现如何?
提前谢谢你

您应该启用带有-ea标志的断言。。。例如,

java -ea -cp . AssertTest

此外,使用断言是产生副作用最糟糕的地方

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


您必须启用断言。ie以java-ea AssertTest的身份运行

永远不要断言任何有副作用的东西。当您在未启用断言的情况下运行时(使用
-ea
启用),将不会执行
list.add(“测试”)

一个好习惯是,不要断言任何错误,如下所示:

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

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

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

另外,不要在应用程序中使用断言表达式的副作用!是的。我刚刚激活了-ea标志,它输出1.ok-
add()
返回一个布尔值。有些事我不知道,但我仍然不想知道。这样的返回类型很愚蠢。如果
Collection
的子类型需要提供这样的函数,则该子类型可以添加新方法。
add()
返回布尔值这一事实在使用
HashSet
时可能很有用。如果尝试添加与集合中包含的哈希代码相同的值,则
add()
方法将返回false。您还可以考虑
集合
s只允许
n
值。因此,返回值是完全合理的。
if (!list.add("test")) {
  assert false;
  // Handle the problem
}