Java 如何以编程方式测试断言是否已启用?
OCP Java SE 6程序员实践考试的正确答案之一是: 您可以通过编程方式测试是否启用了其他断言 不抛出断言错误Java 如何以编程方式测试断言是否已启用?,java,scjp,assertion,ocpjp,Java,Scjp,Assertion,Ocpjp,OCP Java SE 6程序员实践考试的正确答案之一是: 您可以通过编程方式测试是否启用了其他断言 不抛出断言错误 我该怎么做呢?我想你应该使用Class.desiredAssertionStatus() 我用这个 boolean assertOn = false; // *assigns* true if assertions are on. assert assertOn = true; 我不确定这是否是“官方”方式。Oracle Java教程提供了有关如何做到这一点的信息 教程的摘
我该怎么做呢?我想你应该使用
Class.desiredAssertionStatus()
我用这个
boolean assertOn = false;
// *assigns* true if assertions are on.
assert assertOn = true;
我不确定这是否是“官方”方式。Oracle Java教程提供了有关如何做到这一点的信息 教程的摘录 七,。为什么不提供一个构造来查询包含类的断言状态 这样的构造将鼓励人们内联复杂的断言 代码,我们认为这是一件坏事。此外,这是直接的 如果您认为必须:
boolean assertsEnabled = false;
assert assertsEnabled = true; // Intentional side-effect!!!
// Now assertsEnabled is set to the correct value
也许可以帮助某人。我正在使用jdk.nashorn.internal中的AssertsEnabled
System.out.println(AssertsEnabled.assertsEnabled());
// "assertsEnabled()" returns boolean value
也许这对某人有帮助。每次
true
都是false
;)看看@Joe的回答,显然也是“官方”方式。他们甚至称之为“直截了当”,所以请再次删除你的评论,@PeterLawrey:我不确定这是“官方”方式——不是。2不知道Java中的核心类(自1.4版起)很好。desiredAssertionStatus()@Thilo,这不是官方的方法,它是类中定义良好的API函数。这避免了另一种方法可能带来的“意外赋值”警告。实际上,从javadoc:请注意,此方法不能保证返回在初始化(或将要初始化)时与指定类关联的实际断言状态。“所以这个答案对我来说似乎是不正确的,你应该考虑乔的答案。”FBB,我猜应该安全地从你正在测试的类的一个实例中调用这个方法(因为该类保证被初始化)。@ GILI:当它被初始化时。因此,不,javadoc声明它是不安全的,即使类已正确初始化。@FBB另一个答案也有完全相同的问题,它只检查断言在评估(或未评估)断言时是否启用。断言可以根据类和包启用,并且可以通过插装进行更改。
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");
});
}
}
System.out.println(AssertsEnabled.assertsEnabled());
// "assertsEnabled()" returns boolean value