20

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

您可以以编程方式测试是否已启用断言,而无需抛出AssertionError.

我怎样才能做到这一点?

4

6 回答 6

29

我用这个

boolean assertOn = false;
// *assigns* true if assertions are on.
assert assertOn = true; 

我不确定这是“官方”方式。

于 2012-10-23T12:03:21.113 回答
27

我想你应该使用Class.desiredAssertionStatus()

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

于 2012-10-23T12:02:12.667 回答
19

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
于 2012-10-23T12:25:00.377 回答
2
RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean();
boolean assertionsEnabled = mx.getInputArguments().contains("-ea");
于 2015-12-02T08:52:14.410 回答
0

我正在使用来自 jdk.nashorn.internal 的 AssertsEnabled。

System.out.println(AssertsEnabled.assertsEnabled());
// "assertsEnabled()" returns boolean value

也许它可以帮助某人。

于 2020-06-01T16:47:27.337 回答
0
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");
        });
    }
}

也许可以帮助某人。

于 2019-09-20T03:45:42.667 回答