自从我与 JVM 进行单人战斗以来已经有很多年了,我想我忘记了一些事情。
得到了一些有大量断言的代码,没有自定义消息,只是assert some_condition;
我已经验证过的普通代码-ea
正在传递给 VM,并在启动时以编程方式仔细检查了断言是否启用。
调用链更高的是如下代码:
try {
start_the_deeply_nested_stuff();
}
catch (Throwable e) {
do stuff with e.getMessage()
}
AssertionError的文档说它是 Throwable 的后裔,并且始终使用断言的表达式作为 ctor 参数构造它(在转换为字符串之后)。我觉得我应该能够在这里调用 getMessage() 并得到一些有用的东西,比如"assertion failed on file X line Y because your code shits"。
相反,getMessage() 返回 null。我能够弄清楚断言正在被触发的唯一方法是循环e.getStackTrace()
并跟踪行号。
getMessage 怎么了?AssertionError 是否总是应该包含有关触发它的条件的内容?