Java:关于断言行为的问题
我有这个代码片段
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
为什么输出列表是空的?断言在这里表现如何? 先感谢您!
I have this code snippet
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());
}
}
Output:
0
Why is the output list empty? How does assert behave here?
Thank you in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您应该使用 -ea 标志启用断言...例如;
另外,使用断言是副作用最严重的地方。
You should enable assertion with -ea flag... such as;
Also using assertion is worst place for side effects..
永远不要断言任何有副作用的事情。当您在未启用断言的情况下运行(使用
-ea
启用)时,list.add("test")
将不会执行。一个好习惯就是不要断言任何错误,如下所示:
Never assert on anything with side effects. When you run without asserts enabled (enabled with
-ea
),list.add("test")
will not be executed.It's a good habit to never assert anything but false, as follows:
你必须启用断言。即作为 java -ea AssertTest 运行
you have to enable assert. ie run as java -ea AssertTest
顺便说一句 - 断言不应包含程序正确操作所需的代码,因为这会导致正确的操作取决于是否启用断言。
Incidental to your question - assertions should not contain code that is needed for the correct operation of your program, since this causes that correct operation to be dependent on whether assertions are enabled or not.
需要启用断言。使用 -ea 开关启用它们。
请参阅Java 应用程序启动器文档。
Assertions needs to be enabled. Enable them using the -ea switch.
See the Java application launcher docs.
断言方法检查布尔表达式是真还是假。如果表达式的计算结果为 true,则没有任何效果。但如果其计算结果为 false,则断言方法将打印堆栈跟踪并且程序将中止。在此示例实现中,使用字符串的第二个参数,以便可以打印错误原因。
assert method that checks whether a Boolean expression is true or false. If the expression evaluates to true, then there is no effect. But if it evaluates to false, the assert method prints the stack trace and the program aborts. In this sample implementation, a second argument for a string is used so that the cause of error can be printed.