Java 为什么是;“断言错误”;以编程方式激活断言时不会导致AssertionError?
如果我在 在类Java 为什么是;“断言错误”;以编程方式激活断言时不会导致AssertionError?,java,assertions,Java,Assertions,如果我在 在类richtercloud.java.assertion.ignored.NewMain的main方法中,我从打印的语句中看到,assert false不会导致AssertionError就像我将NewMain打包到一个JAR中,并使用java-ea-JAR java-assertion-ignored-1.0-SNAPSHOT-JAR-with-dependencies.JAR richtercloud.java.assertion.ignored.NewMain运行它一样 关于断
richtercloud.java.assertion.ignored.NewMain
的main
方法中,我从打印的语句中看到,assert false
不会导致AssertionError
就像我将NewMain
打包到一个JAR中,并使用java-ea-JAR java-assertion-ignored-1.0-SNAPSHOT-JAR-with-dependencies.JAR richtercloud.java.assertion.ignored.NewMain
运行它一样
关于断言的编程启用的其他问题,这显然不是一个解决方案
MCVE at.如果我正确理解了文档,则必须在加载类之前设置断言状态;在本例中,您已经加载了该类,因此您的
setDefaultAssertionStatus(true)
无效
(斜体):
每个类加载器维护一个默认断言状态,这是一个布尔值,用于确定在随后由类加载器初始化的新类中默认启用还是禁用断言
因此,设置默认断言状态只会影响随后加载的类,而不会影响当前正在执行的类
ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(true);
ClassLoader.getSystemClassLoader().setPackageAssertionStatus("richtercloud.java.assertion.ignored", true);
System.out.println(String.format("desired assertion status: %b",
NewMain.class.desiredAssertionStatus()));
assert false;
System.out.println("assertion has been ignored");