OCP Java SE 6 程序员实践考试的正确答案之一是:
您可以以编程方式测试是否已启用断言,而无需抛出
AssertionError
.
我怎样才能做到这一点?
我用这个
boolean assertOn = false;
// *assigns* true if assertions are on.
assert assertOn = true;
我不确定这是“官方”方式。
我想你应该使用Class.desiredAssertionStatus()
http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#desiredAssertionStatus()
Oracle Java 教程提供了有关如何执行此操作的信息...
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
RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean();
boolean assertionsEnabled = mx.getInputArguments().contains("-ea");
我正在使用来自 jdk.nashorn.internal 的 AssertsEnabled。
System.out.println(AssertsEnabled.assertsEnabled());
// "assertsEnabled()" returns boolean value
也许它可以帮助某人。
package io.github.baijifeilong.tmp;
import io.vavr.control.Try;
/**
* Created by BaiJiFeiLong@gmail.com at 2019-04-18 09:12
*/
public class TmpApp {
public static void main(String[] args) {
Try.run(() -> {
assert false;
}).onSuccess($ -> {
throw new RuntimeException("Assertion is not enabled");
});
}
}
也许可以帮助某人。