如何以编程方式测试断言是否已启用?

Joe*_*Joe 18 java scjp assertion ocpjp

OCP Java SE 6程序员实践考试的正确答案之一是:

您可以通过编程方式测试已启用的断言,而不会抛出AssertionError.

我怎样才能做到这一点?

Pet*_*rey 30

我用这个

boolean assertOn = false;
// *assigns* true if assertions are on.
assert assertOn = true; 
Run Code Online (Sandbox Code Playgroud)

我不确定这是"官方"方式.

  • 每次`true`是'false`;) (6认同)
  • 看看@Joe 的回答,显然也是“官方”方式。 (2认同)

Hak*_*rce 24

我猜你应该用 Class.desiredAssertionStatus()

http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#desiredAssertionStatus()

  • 实际上,来自javadoc:"请注意,这个方法不能保证返回当它(或将要)初始化时与指定类相关联的(或将要)的实际断言状态." 所以这个答案对我来说似乎不对,你应该考虑乔的答案. (4认同)

Joe*_*Joe 17

Oracle Java Tutorial提供了有关如何执行此操作的信息...

http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html

本教程的摘录

7.为什么不提供一个构造来查询包含类的断言状态?

这样的结构会鼓励人们内联复杂的断言代码,我们认为这是一件坏事.此外,如果您认为必须,可以直接查询当前API顶部的断言状态:

boolean assertsEnabled = false;
assert assertsEnabled = true; // Intentional side-effect!!!
// Now assertsEnabled is set to the correct value
Run Code Online (Sandbox Code Playgroud)